Zombie sudah mati, jadi Anda tidak bisa membunuhnya. Untuk membersihkan zombie, harus ditunggu oleh induknya, jadi membunuh induknya harus berhasil untuk menghilangkan zombie tersebut. (Setelah orang tua meninggal, zombie akan diwarisi oleh pid 1, yang akan menunggunya dan menghapus entrinya di tabel proses.) Jika daemon Anda menghasilkan anak yang menjadi zombie, Anda memiliki bug. Daemon Anda akan mengetahui kapan anaknya mati dan wait
pada mereka untuk menentukan status keluar mereka.
Contoh bagaimana Anda dapat mengirim sinyal ke setiap proses yang merupakan induk dari zombie (perhatikan bahwa ini sangat kasar dan dapat mematikan proses yang tidak Anda inginkan. Saya tidak menyarankan menggunakan palu godam semacam ini):
# Don't do this. Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
Saya mencoba:
ps aux | grep -w Z # returns the zombies pid
ps o ppid {returned pid from previous command} # returns the parent
kill -1 {the parent id from previous command}
ini akan berhasil :)
Menemukannya di http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Ini tip bagus dari pengguna lain (Thxs Bill Dandreta):Terkadang
kill -9 <pid>
tidak akan membunuh proses. Jalankan
ps -xal
bidang ke-4 adalah proses induk, bunuh semua orang tua zombie dan zombie mati!
Contoh
4 0 18581 31706 17 0 2664 1236 wait S ? 0:00 sh -c /usr/bin/gcc -fomit-frame-pointer -O -mfpmat
4 0 18582 18581 17 0 2064 828 wait S ? 0:00 /usr/i686-pc-linux-gnu/gcc-bin/3.3.6/gcc -fomit-fr
4 0 18583 18582 21 0 6684 3100 - R ? 0:00 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quie
18581
, 18582
, 18583
adalah zombie -
kill -9 18581 18582 18583
tidak berpengaruh.
kill -9 31706
menghapus zombie.
Anda dapat membersihkan proses zombi dengan mematikan proses induknya dengan perintah berikut:
kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')