Haruskah saya membunuh proses zombie di sistem saya?

20

Karena saya pemula dalam sistem Linux / Unix dan baru saja membaca tentang proses zombie , saya punya satu pertanyaan. Saya punya 10 dari mereka sekarang. Apakah saya perlu membunuh mereka dan jika ya, mengapa? Apakah mereka memuat pada sistem saya?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Jason Paddle
sumber
25
Tidak perlu membunuh mereka. Mereka sudah mati.
Marco
2
Jadi mereka tidak memuat sistem saya lagi. Dan mereka akan tetap seperti ini sampai saya reboot sistem atau saya bunuh mereka, kan?
Jason Paddle
7
@ Marsco: Anda tidak bisa membunuh yang sudah mati. Tapi kau bisa membunuh orang tuanya, harrharr!
wullxz
7
Masalahnya adalah bahwa orang tua mereka tidak menuai mereka (ketika mereka meninggal).
ypercubeᵀᴹ
3
10 zombie ??? Anda penuh! Jalankan Jason run.
Luc M

Jawaban:

29

Anda tidak dapat membunuh zombie, itu sudah mati.

Sumber daya dari proses itu gratis dan tersedia untuk proses lain. Yang tersisa adalah entri dalam tabel proses. Ini tidak memiliki pengaruh pada kinerja, jangan khawatir.

Marco
sumber
Ya, ini masuk akal. Saya bisa membunuh proses induk. Terima kasih atas informasinya. Saya hanya ingin tahu apakah mereka memuat atau tidak ada sistem.
Jason Paddle
Saya percaya ada batas zombie sekalipun. Saya pikir ini 1024, jadi itu tidak akan melukai kinerja tetapi saya pikir ada batas pada jumlah yang dapat Anda miliki.
ProfessionalAmateur
@ProfessionalAmateur Apa yang terjadi jika Anda mencapai batas zombie (1024 atau apa pun)?
Roddy of the Frozen Peas
@RoddyoftheFrozenPeas - Sejujurnya saya tidak yakin, saya selalu membersihkannya sebelum sampai ke titik itu. Saya membayangkan sistem akan mencoba untuk membuat zombie lain dan mungkin memiliki pelanggaran memori atau kesalahan keras lainnya, meluap atau kesalahan segmentasi.
ProfessionalAmateur
2
@ProfessionalAmateur: Tidak ada batasan zombie di linux. PID Zombie tunduk /proc/sys/kernel/pid_max, sama seperti PID lainnya.
rsaw
16

Apa saja proses zombie yang muncul di ps? Saya membunuh mereka tetapi mereka tidak pergi!

Zombi adalah proses mati. Anda tidak dapat membunuh orang mati. Semua proses akhirnya mati, dan ketika mereka melakukannya mereka menjadi zombie. Mereka hampir tidak mengkonsumsi sumber daya, yang diharapkan karena mereka sudah mati! Alasan zombie adalah agar orang tua zombie (proses) dapat mengambil status keluar zombie dan statistik penggunaan sumber daya. Induk memberi sinyal sistem operasi bahwa ia tidak lagi membutuhkan zombie dengan menggunakan salah satu dari panggilan tunggu () sistem.

Ketika suatu proses mati, anaknya memproses semua menjadi anak-anak dari proses nomor 1, yang merupakan proses init. Init selalu menunggu anak-anak mati, sehingga mereka tidak tetap sebagai zombie.

Jika Anda memiliki proses zombie, itu artinya zombie tersebut belum ditunggu oleh orang tua mereka (lihat PPID yang ditampilkan oleh ps -l). Anda memiliki tiga pilihan: Perbaiki proses induk (tunggu sebentar); bunuh orang tua; atau hidup dengannya. Ingatlah bahwa hidup dengan itu tidak begitu sulit karena zombie mengambil sedikit lebih dari satu baris tambahan dalam output ps.

Sumber: http://www.linuxsa.org.au/tips/zombies.html

Dan jika Anda sedang bersenang-senang, utas superuser ini mungkin menarik bagi Anda: Bagaimana Anda menemukan proses induk dari proses zombie?

wullxz
sumber
Perhatikan bahwa memperbaiki orang tua mungkin berlebihan - mungkin itu belum sampai menunggu anak-anaknya. Mungkin itu akan dilakukan nanti (atau ya, mungkin tidak).
Romain
ya kau benar. Jawaban dari pertanyaan yang saya tautkan memberi tahu Anda cara menentukan proses induk. Jadi, Anda selalu memiliki kesempatan untuk memeriksa proses mana yang menciptakan zombie dan untuk memutuskan apakah perlu untuk membuatnya tetap berjalan.
wullxz
7

Anda tidak perlu membunuh mereka.

Untuk membangun beberapa pemahaman dasar:

Setiap proses adalah anak dari proses induk (kecuali untuk proses init, tetapi kita tidak perlu khawatir tentang itu).

Ketika proses anak selesai dieksekusi, mungkin masih berisi data yang ingin diakses oleh proses induk, biasanya kode keluar yang menjelaskan hasil proses anak (Apakah berhasil? Apakah itu salah? Apa kode kesalahannya?).

Proses anak yang sudah selesai hang di dalam tabel proses sebagai proses zombie sampai proses induk "menuai" atau menunggu proses anak, yang hanya proses induk memberitahu OS bahwa tidak perlu proses anak itu lagi; Ia telah membaca nilai pengembalian apa pun yang diinginkannya, dan selesai dengannya. Pada titik ini, sistem akan membersihkan entri dalam tabel proses.

Darth Android
sumber
3

Proses ini tidak perlu dibunuh.

Kalau-kalau Anda memang ingin membunuhnya (untuk alasan apa pun), pastikan Anda menembak kepalanya, berikut ini adalah perintah yang berguna:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

Dari https://www.erianna.com/kill-a-linux-zombie-process

Datageek
sumber
1
+1 untuk shoot at the head.
BenjiWiebe