Saya mencoba untuk mematikan semua pekerjaan latar belakang saya sebelumnya di bawah KUbuntu oleh
kill -9 $(jobs -p)
Meskipun perintah ini segera memberi pesan seperti
[1] Membunuh myjob1
[2] Membunuh myjob2
Saya masih bisa melihat proses mereka tergantung pada output atas dan penggunaan CPU dan memori tidak berubah dalam output uptime dan gratis.
Jadi saya kira saya harus tidak membunuh mereka dengan benar. Bisakah seseorang tolong jelaskan apa yang terjadi pada saya dan apa yang harus saya lakukan?
Saya menemukan bahwa di atas, jika ketik k dan masukan PID saya dapat mematikan proses satu per satu. JADI, apakah ini berbeda dengan perintah kill?
Saya juga menemukan tempat online http://www.ruhr.de/home/smallo/award.html tentang tidak merekomendasikan kill -9
Penggunaan huruf formulir Kill -9 yang tidak berguna
(Kutipan kekejian)
Tidak tidak Tidak. Jangan gunakan kill -9.
Itu tidak memberi proses kesempatan untuk bersih:
1) mematikan koneksi soket
2) membersihkan file temp
3) beri tahu anak-anaknya bahwa mereka akan pergi
4) mengatur ulang karakteristik terminalnya
dan seterusnya dan seterusnya.
Umumnya, kirim 15, dan tunggu satu atau dua detik, dan jika itu tidak berhasil, kirim 2, dan jika itu tidak berhasil, kirim 1. Jika tidak, HAPUS BINARY karena programnya berperilaku buruk!
Jangan gunakan kill -9. Jangan mengeluarkan pemanen gabungan hanya untuk merapikan pot bunga.
Apakah ini benar? Apa yang dimaksud dengan "kirim 15", "kirim 2" dan "kirim 1"? Apakah mereka perintah sendiri atau "kill -15 PID", "kill -2 PID" dan "kill -1 PID"?
Terima kasih dan salam!
Jawaban:
Proses Anda mungkin mati tetapi masih muncul di entri tabel proses karena ini adalah "proses zombie". Ketika proses anak dihentikan dan benar-benar menghilang (kecuali entri tabel prosesnya) dan orang tua tidak dapat mengambil status terminasi (melalui salah satu fungsi menunggu), itu disebut zombie ... Membunuh (melalui sinyal) zombie tidak akan bekerja karena sudah dihentikan. Yang perlu Anda lakukan adalah mencari tahu proses induknya dan membunuh thjat one cleany, sehingga tidak menggunakan kill - 9
berikut adalah dua langkah sederhana untuk membunuh zombie ...
sumber
-f
bendera untuk ps untuk melihat proses induk.lihat
man kill
definisi berbagai sinyal yang tersedia, tetapi ya.Ini menginformasikan suatu proses bahwa pengguna "selesai" dengan proses tersebut, meskipun mereka menunjukkan alasan yang agak berbeda. sedang melakukan dan berhenti ", SIGHUP hanya berarti tidak ada yang mendengarkan lagi (proses server mungkin bereaksi secara sah terhadap SIGHUP dengan menghentikan output konsolnya dan terus berjalan).
sumber
Itu berarti menggunakan
kill -15 PID
(atau nomor lain) alih-alihkill -9 PID
. Jumlahnya setara dengan sinyal unix yang berbeda .sumber
Ini berarti ketik "kill -1" atau "kill -15" daripada mengetik "kill -9". Bunuh -9 adalah peluru hardcore di kepala setiap proses yang berjalan, membunuhnya mati dalam keadaan kotor yang dapat menyebabkan memori bocor, bla bla.
Jika Anda mengetikkan kill -9 dan tidak berfungsi, maka saya akan memastikan prosesnya tidak muncul kembali, dan Anda memiliki izin untuk mematikan proses itu.
sumber
Sinyal 9 adalah SIGKILL. Mengirim SIGKILL meminta OS untuk segera menghentikan proses, tidak ada pertanyaan. Prosesnya tidak diberitahukan sebelumnya dan tidak memiliki kesempatan untuk membersihkan setelahnya.
Sinyal 15 adalah SIGTERM. Mengirim SIGTERM meminta OS untuk meminta proses mematikan dirinya.
SIGKILL dapat diabaikan jika OS berpikir prosesnya adalah melakukan IO, atau jika itu adalah Zombie (Proses anak yang orang tuanya tidak membersihkan setelah itu).
SIGTERM mungkin diabaikan oleh aplikasi, tetapi tidak direkomendasikan bahwa aplikasi melakukan ini, karena OS mengirim SIGTERM selama shutdown, segera diikuti oleh SIGKILL jika suatu program masih berjalan.
Catatan: Baris perintah
kill
selalu meminta OS untuk mengirim sinyal ke aplikasi, yang mungkin atau mungkin tidak dilakukan berdasarkan siapa yang memiliki proses, dll ...sumber