Saya selalu sangat ragu untuk berlari kill -9
, tetapi saya melihat admin lain melakukannya hampir secara rutin.
Saya pikir mungkin ada jalan tengah yang masuk akal, jadi:
- Kapan dan mengapa harus
kill -9
digunakan? Kapan dan mengapa tidak? - Apa yang harus dicoba sebelum melakukannya?
- Jenis proses debug "hung" apa yang bisa menyebabkan masalah lebih lanjut?
Jawaban:
Secara umum, Anda harus menggunakan
kill
(kependekan darikill -s TERM
, atau pada sebagian besar sistemkill -15
) sebelumkill -9
(kill -s KILL
) untuk memberikan proses target kesempatan untuk membersihkan setelahnya. (Proses tidak dapat menangkap atau mengabaikanSIGKILL
, tetapi mereka dapat dan sering menangkapSIGTERM
.) Jika Anda tidak memberikan proses kesempatan untuk menyelesaikan apa yang dilakukan dan dibersihkan, mungkin meninggalkan file yang rusak (atau negara bagian lain) di sekitarnya. tidak akan dapat mengerti setelah dimulai ulang.strace
/truss
,ltrace
dangdb
umumnya ide bagus untuk melihat mengapa proses macet macet. (truss -u
pada Solaris sangat membantu; Saya menemukanltrace
terlalu sering menyajikan argumen untuk panggilan perpustakaan dalam format yang tidak dapat digunakan.) Solaris juga memiliki/proc
alat-alat berbasis berguna , beberapa di antaranya telah porting ke Linux. (pstack
sering membantu).sumber
kill -9
memiliki penggunaannya, sebagai terminator upaya terakhir, penekanan pada upaya terakhir; admin yang menggunakannya sebelum pilihan terakhir a) tidak mengerti menjadi admin dengan baik, dan b) tidak boleh menggunakan sistem produksi.Randal Schwartz sering memposting "Penggunaan tidak berguna (x)" pada daftar. Salah satu pos tersebut adalah tentang
kill -9
. Ini termasuk alasan dan resep untuk diikuti. Ini adalah versi yang direkonstruksi (dikutip di bawah).sumber
Itu harus selalu OK untuk dilakukan
kill -9
, sama seperti itu harus selalu OK untuk mematikan dengan menarik kabel daya. Mungkin anti-sosial, dan meninggalkan beberapa pemulihan untuk dilakukan, tetapi itu harus bekerja, dan merupakan alat yang ampuh bagi yang tidak sabar.Saya mengatakan ini sebagai seseorang yang akan mencoba pembunuhan biasa (15) terlebih dahulu, karena itu memberikan program kesempatan untuk melakukan pembersihan - mungkin hanya menulis ke log "keluar pada sig 15". Tapi saya tidak akan menerima keluhan tentang perilaku buruk pada pembunuhan -9.
Alasannya: banyak pelanggan yang melakukan hal-hal yang lebih disukai programmer daripada tidak. Pengujian random kill -9 adalah skenario pengujian yang baik dan adil, dan jika sistem Anda tidak menanganinya, sistem Anda rusak.
sumber
kill -9
hal seperti itu tidak baik untuk melepas steker. Meskipun tentu saja ada situasi di mana Anda tidak punya pilihan, ini harus menjadi tindakan terakhir. Tentu saja, menarik kabel daya ataukill -9
tidak seharusnya memiliki efek buruk seperti mencegah aplikasi atau OS untuk memulai kembali dengan benar jika sama sekali, tetapi sial terjadi dan menggunakan cara yang disarankan (kill [-15]
) atau shutdown yang teratur akan membantu menghindari kekacauan yang mungkin terjadi jika Anda secara rutin menyela program dan OS dengan cara itu. Dalam kasus apa pun, selalu ada risiko kehilangan data terlepas dari kekokohan kode.Saya menggunakan kill -9 dengan cara yang sama seperti saya membuang peralatan dapur di mesin pencuci piring: jika peralatan dapur hancur oleh mesin pencuci piring maka saya tidak menginginkannya.
Hal yang sama berlaku untuk sebagian besar program (bahkan basis data): jika saya tidak dapat membunuh mereka tanpa ada yang rusak, saya tidak benar-benar ingin menggunakannya. (Dan jika Anda kebetulan menggunakan salah satu dari non-database ini yang mendorong Anda untuk berpura-pura mereka memiliki data yang bertahan ketika mereka belum: well, saya kira sudah saatnya Anda mulai berpikir tentang apa yang Anda lakukan).
Karena di dunia nyata barang bisa turun kapan saja dengan alasan apa pun.
Orang harus menulis perangkat lunak yang toleran terhadap gangguan. Khususnya di server. Anda harus belajar bagaimana merancang perangkat lunak yang mengasumsikan bahwa segala sesuatu akan rusak, macet dll.
Hal yang sama berlaku untuk perangkat lunak desktop. Ketika saya ingin mematikan peramban, biasanya AGES perlu dimatikan. Tidak ada yang perlu dilakukan oleh peramban saya yang membutuhkan waktu paling lama beberapa detik. Ketika saya memintanya untuk mematikannya, ia harus segera melakukannya. Ketika tidak, well, maka kita tarik kill -9 dan berhasil.
sumber
Tidak disebutkan dalam semua jawaban lain adalah kasus di mana
kill -9
tidak berfungsi sama sekali, ketika suatu proses adalah<defunct>
dan tidak dapat dibunuh:Bagaimana saya bisa membunuh proses <defunct> yang orang tuanya init?
Apa yang tidak berfungsi untuk suatu proses dan mengapa tidak terbunuh?
Jadi sebelum Anda mencoba untuk
kill -9
sebuah<defunct>
proses berjalanps -ef
untuk melihat apa yang orang tuanya adalah dan mencoba yang-15
(JANGKA) atau-2
(INT) dan terakhir-9
(membunuh) dari orang tuanya.Catatan: apa
ps -ef
fungsinya .Kemudian edit dan hati-hati: Lanjutkan dengan hati-hati ketika membunuh proses, orang tua mereka atau anak-anak mereka, karena mereka dapat membiarkan file dibuka atau rusak, koneksi yang belum selesai, dapat merusak database dll kecuali jika Anda tahu apa yang
kill -9
dilakukan untuk suatu proses, gunakan hanya sebagai pilihan terakhir , dan jika Anda perlu menjalankan kill gunakan sinyal yang ditentukan di atas sebelum digunakan-9 (KILL)
sumber
Jangan pernah melakukan
kill -9 1
. Juga hindari melakukan kill pada proses tertentu seperti mount`. Ketika saya harus membunuh banyak proses (misalnya, sesi X digantung dan saya harus membunuh semua proses pengguna tertentu), saya membalik urutan proses. Sebagai contoh:Perlu diingat bahwa
kill
tidak menghentikan proses dan melepaskan sumber dayanya. Yang dilakukannya hanyalah mengirim sinyal SIGKILL ke proses; Anda bisa berakhir dengan proses yang menggantung.sumber
kill -9 1
diabaikan di bawah sebagian besar kesatuan. Tidak perlu untuk menghindarikill -9
untukmount
, tetapi tidak ada gunanya itu baik. Saya tidak tahu apa yang Anda maksud dengan "membalik urutan proses".kill -9
memang menghentikan (seperti dalam, membunuh) suatu proses, tanpa memberikannya kesempatan untuk mengeluh, namun pembunuhan itu tidak akan terjadi segera jika prosesnya dalam panggilan sistem yang tidak dapat disela . Membunuh suatu proses dengankill -9
memang melepaskan sebagian besar sumber daya, tetapi tidak semua .Proses membunuh mau tidak mau bukanlah langkah yang mulus: data bisa hilang, aplikasi yang dirancang dengan buruk dapat memecahkan diri mereka dengan cara yang halus yang tidak dapat diperbaiki tanpa menginstal ulang .. tapi itu sepenuhnya tergantung pada mengetahui apa yang ada dan apa yang tidak aman dalam suatu situasi yang diberikan. dan apa yang akan beresiko. Pengguna harus memiliki gagasan tentang apa proses itu, atau seharusnya, melakukan dan apa kendala itu (disk IOPS, rss / swap) dan dapat memperkirakan berapa lama waktu yang diperlukan untuk proses yang berjalan lama (katakanlah salinan file, reencoding mp3, migrasi email, cadangan, [timesink favorit Anda di sini].)
Lebih jauh, mengirim
SIGKILL
ke pid bukan jaminan untuk membunuhnya. Jika itu terjebak dalam syscall atau sudah zombie (Z
dips
), mungkin terus zombie. Ini seringkali merupakan kasus proses yang berjalan lama dan lupabg
sebelum mencobanyakill -9
. Sederhanafg
akan menyambung kembali stdin / stdout dan mungkin membuka blokir proses, biasanya kemudian diikuti oleh proses penghentian. Jika macet di tempat lain atau dalam beberapa bentuk kebuntuan kernel lain, hanya reboot yang dapat menghapus proses. (Proses zombie sudah mati setelahSIGKILL
diproses oleh kernel (tidak ada kode userland lebih lanjut akan berjalan), biasanya ada alasan kernel (mirip dengan "diblokir" menunggu syscall untuk menyelesaikan) untuk proses tidak berakhir.)Juga, jika Anda ingin membunuh proses dan semua anak-anaknya, biasakan menelepon
kill
dengan PID yang dinegasikan, bukan hanya PID itu sendiri . Tidak ada jaminanSIGHUP
,SIGPIPE
atauSIGINT
sinyal lain membersihkannya, dan memiliki banyak proses pembersihan yang tidak diakui (ingat anjing?) Menyebalkan.Bonus jahat:
kill -9 -1
sedikit lebih merusak daripadakill -9 1
(Jangan melakukan keduanya sebagai root kecuali Anda ingin melihat apa yang terjadi pada VM yang tidak penting dan tidak penting)sumber
Mengapa Anda tidak ingin
kill -9
melakukan proses secara normalMenurut
man 7 signal
:Ini berarti bahwa aplikasi yang menerima salah satu dari sinyal-sinyal ini tidak dapat "menangkap" mereka untuk melakukan perilaku mematikan.
Apa yang harus Anda lakukan sebelum menjalankan
kill -9
suatu prosesAnda harus memastikan bahwa sebelum mengirim sinyal ke proses yang Anda:
kill -9
ke proses pada dasarnya akan mengakibatkan hilangnya data ini.sumber
Saya telah membuat skrip yang membantu mengotomatiskan masalah ini.
Ini didasarkan pada jawaban lengkap saya 2 dalam pertanyaan yang sangat mirip di stackoverflow .
Anda bisa membaca semua penjelasan di sana. Untuk meringkas saya akan merekomendasikan adil
SIGTERM
danSIGKILL
, atau bahkanSIGTERM
,SIGINT
danSIGKILL
. Namun saya memberikan lebih banyak opsi dalam jawaban lengkap.Silakan, silakan unduh (clone) dari repositori github untuk mematikannya 1
sumber