Peramban krom tidak responsif dan saya mencoba membunuhnya, tetapi alih-alih menghilang prosesnya ada <defunct>
di kanannya, dan tidak terbunuh:
Apa itu <defunct>
untuk suatu proses dan mengapa itu tidak terbunuh?
Peramban krom tidak responsif dan saya mencoba membunuhnya, tetapi alih-alih menghilang prosesnya ada <defunct>
di kanannya, dan tidak terbunuh:
Apa itu <defunct>
untuk suatu proses dan mengapa itu tidak terbunuh?
Jawaban:
Dari hasil Anda, kami melihat "mati", yang berarti proses telah menyelesaikan tugasnya atau telah rusak atau terbunuh, tetapi proses anaknya masih berjalan atau proses induk ini memantau proses anaknya. Untuk membunuh proses semacam ini, kill -9 PID tidak berfungsi. Anda dapat mencoba untuk membunuh mereka dengan perintah ini tetapi itu akan menunjukkan ini lagi dan lagi.
Tentukan yang merupakan proses induk dari proses mati ini dan bunuh. Untuk mengetahui ini jalankan perintah:
ps -ef | grep defunct
UID PID PPID C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
1000 1808 1777 0 Oct04 ? 00:00:00 [zeitgeist-datah] <defunct>
Lalu kill -9 637 27872
, kemudian verifikasi proses yang mati sudah lewat ps -ef | grep defunct
.
1
( init
)? Seandainya saya harus menunggu?
ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9
grep [d]efunct
atau yang serupa dan itu tidak akan cocok dengan dirinya sendiri.
parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill
. Jalankan kembali skrip setelah 30 detik atau lebih, dengan kill -9
jika Anda inginkan. (Perhatikan bahwa saya secara khusus melarang pembunuhan Init
)
Halaman manual ps (1) mengatakan :
Proses yang ditandai
<defunct>
adalah proses mati (disebut "zombie" ) yang tetap karena induknya belum menghancurkannya dengan benar. Proses-proses ini akan dihancurkan olehinit(8)
jika proses induk keluar.
Anda tidak dapat membunuhnya karena sudah mati. Satu-satunya yang tersisa adalah entri dalam tabel proses :
Pada sistem operasi komputer seperti Unix dan Unix, proses zombie atau proses mati adalah proses yang telah menyelesaikan eksekusi tetapi masih memiliki entri dalam tabel proses. Entri ini masih diperlukan untuk memungkinkan proses induk membaca status keluar anaknya.
Tidak ada salahnya membiarkan proses seperti itu terjadi kecuali ada banyak dari mereka. Zombie akhirnya menuai oleh orang tuanya (dengan menelepon wait(2)
). Jika orang tua asli belum memetiknya sebelum keluar sendiri kemudian init
proses ( pid == 1
) melakukannya di lain waktu. Proses Zombie hanya:
Suatu proses yang telah dihentikan dan yang dihapus ketika status keluarnya telah dilaporkan ke proses lain yang sedang menunggu proses itu berakhir.
Terima kasih Mike S. Kami mengambil baris Anda dan menulis skrip yang akan membunuh proses mati yang orang tuanya ada di .telnetd. Kami tidak ingin itu menghentikan proses induk apa pun, hanya telnetd yang kami tahu menyebabkan masalah dan kami akan menjalankannya beberapa kali untuk membunuh banyak proses jika diperlukan.
# egrep -v '^1$ = Make sure the process is not the init process.
# awk '{print $3}' = Print the parent process.
first_parent_of_first_dead_kid=$(ps -ef | grep [d]efunct | awk '{print $3}' | head -n1 | egrep -v '^1$')
echo "$first_parent_of_first_dead_kid"
# If the first parent of the first dead kid is in.telnetd, then kill it.
if ps -ef | grep $first_parent_of_first_dead_kid | grep in.telnetd;then
echo "We have a defunct process whose parent process is in.telnetd" | logger -t KILL-DEFUNCT-TELNET
echo "killing $first_parent_of_first_dead_kid" | logger -t KILL-DEFUNCT-TELNET
kill $first_parent_of_first_dead_kid 2>&1 | logger -t KILL-DEFUNCT-TELNET
fi
memperluas jawaban Paddington ..
Dari hasil Anda, kami melihat ada yang mati , yang berarti proses anak ini telah menyelesaikan tugasnya atau telah rusak atau terbunuh. Proses induknya masih berjalan dan belum melihat anaknya yang mati.
kill -9 PID
tidak akan berfungsi (sudah mati).
Untuk menentukan induk dari proses anak ini, jalankan perintah ini:
ps -ef | grep defunct
UID PID **PPID** C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
Lihat siapa orang tuanya: ps ax | grep 27872
Jika mau, Anda dapat membunuh orang tua, dan yang mati akan hilang.
kill -9 27872
lihat jawaban JF Sebastian untuk alasan yang lebih teknis.
Menambahkan ke jawaban @ Paddington, saya menambahkan fungsi ini ke bashrc saya untuk pemeriksaan cepat:
defunct(){
echo "Children:"
ps -ef | head -n1
ps -ef | grep defunct
echo "------------------------------"
echo "Parents:"
ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
echo "$ppids" | while read ppid; do
ps -A | grep "$ppid"
done
}
Ini menghasilkan sesuatu seperti:
Anak-anak: UID PID PPID C STIME TTY TIME CMD pengguna 25707 25697 0 Feb26 poin / 0 00:00:00 [sh] pengguna 30381 29915 0 11:46 poin / 7 00:00:00 grep mati ------------------------------ Orangtua: 25697 poin / 0 00:00:00 npm
kill -9 PID
tidak berfungsi". Sebagian benar: pada kenyataannya, TIDAK membunuh akan berhasil. Selain itu, -9 harus digunakan sebagai pilihan terakhir. 99% dari waktu proses default kill dari parent akan membunuhnya DAN menuai semua anak. "Bunuh default" adalah SIGTERM (-15). Saya mendorong penggemar -9 (SIGKILL) untuk membaca stackoverflow.com/questions/690415/…