Saya meluncurkan program saya di latar depan (program daemon), dan kemudian saya membunuhnya dengan kill -9
, tetapi saya mendapatkan zombie yang tersisa dan saya tidak dapat membunuhnya kill -9
. Bagaimana cara membunuh proses zombie?
Jika zombie adalah proses mati (sudah terbunuh), bagaimana saya menghapusnya dari output ps aux
?
root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# ps aux | grep anyprogram
1163 root 2552 S anyprogramd
1167 root 2552 S anyprogramd
1169 root 2552 S anyprogramd
1170 root 2552 S anyprogramd
10101 root 944 S grep anyprogram
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
1163 root 0 Z [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
1163 root 0 Z [anyprogramd]
ps -o ppid 1163
dikatakan? Yaitu, siapa orang tua 1163? Itulah proses yang harus diakhiri.Jawaban:
Zombie sudah mati, jadi kamu tidak bisa membunuhnya. Untuk membersihkan zombie, itu harus ditunggu oleh orang tuanya, jadi membunuh orang tua harus bekerja untuk menghilangkan zombie. (Setelah orang tua meninggal, zombie akan diwarisi oleh pid 1, yang akan menunggu dan menghapus entri di tabel proses.) Jika daemon Anda memunculkan anak-anak yang menjadi zombie, Anda memiliki bug. Dasmon Anda harus memperhatikan ketika anak-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 membunuh proses yang tidak Anda inginkan. Saya tidak menyarankan menggunakan palu godam semacam ini):
sumber
ps aux
?kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}' | sort -u)
PPid
baris jika Andacat /proc/<pid>/status
Anda dapat membersihkan proses zombie dengan membunuh proses induknya dengan perintah berikut:
sumber
grep
tidak perlu.ps ... | awk '/[zZ]/{print $2}'
Saya mencoba:
ini akan bekerja :)
sumber
Ditemukan di http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Berikut ini tip yang bagus dari pengguna lain (Thxs Bill Dandreta): Terkadang
tidak akan membunuh suatu proses. Lari
bidang ke-4 adalah proses induk, membunuh semua orang tua zombie dan zombie mati!
Contoh
18581
,18582
,18583
Adalah zombie -tidak berpengaruh.
menghapus zombie.
sumber
init
untuk saya, dan sekarang saya tidak bisa melakukan apa-apa dan saya dipaksa untuk memulai kembali ... proses zombie adalah Java, mengambil 3.4GB dari 4GB RAMSaya mencoba
dan itu bekerja untuk saya.
sumber