Proses zombie dibuat dalam sistem Unix / Linux. Kami dapat menghapusnya melalui kill
perintah.
Tetapi apakah ada mekanisme pembersihan di Linux untuk menangani proses zombie?
sumber
Proses zombie dibuat dalam sistem Unix / Linux. Kami dapat menghapusnya melalui kill
perintah.
Tetapi apakah ada mekanisme pembersihan di Linux untuk menangani proses zombie?
Proses zombie sudah mati. Anda tidak dapat membunuh mereka. The kill
perintah atau system call tidak berpengaruh pada proses zombie. (Anda dapat membuat zombie pergi kill
, tetapi Anda harus menembak orang tua, bukan zombie, seperti yang akan kita lihat sebentar lagi.)
Proses zombie sebenarnya bukan proses, itu hanya entri di tabel proses. Tidak ada sumber daya lain yang terkait dengan proses zombie: tidak memiliki memori atau kode apa pun yang sedang berjalan, tidak ada file yang terbuka, dll.
Ketika suatu proses mati, hal terakhir yang harus dilakukan, setelah semua sumber daya lainnya dibersihkan, adalah entri dalam tabel proses. Entri ini disimpan di sekitar, membentuk zombie, untuk memungkinkan proses induk untuk melacak status keluar anak. Orang tua membaca status keluar dengan memanggil salah satu wait
keluarga syscalls; pada titik ini, zombie menghilang. Memanggil wait
dikatakan menuai anak, memperluas metafora zombie mati tetapi dalam beberapa cara masih belum sepenuhnya diproses menjadi kehidupan setelah kematian. Induk juga dapat menunjukkan bahwa ia tidak peduli (dengan mengabaikan sinyal SIGCHLD, atau dengan memanggil sigaction
dengan SA_NOCLDWAIT
bendera), dalam hal ini entri dalam tabel proses segera dihapus ketika anak meninggal.
Jadi zombie hanya ada ketika proses telah mati dan orang tuanya belum menelepon wait
. Keadaan ini hanya bisa bertahan selama orang tua masih berjalan. Jika orang tua meninggal sebelum anak atau mati tanpa membaca status anak, proses orang tua zombie diatur ke proses dengan PID 1, yaitu init
. Salah satu tugasnya init
adalah menelepon wait
dalam satu lingkaran dan karenanya menuai setiap proses zombie yang ditinggalkan oleh orang tuanya.
Anda bukan kill
proses zombie, karena sudah mati.
Proses zombie harus wait
diedit oleh orang tua mereka, sehingga status keluar mereka harus dikumpulkan.
Satu-satunya "mekanisme pembersihan built-in" yang ada di Linux, bekerja untuk kasus dimana setiap proses orangtua mati sebelum mengumpulkan status keluar anak-anaknya. Dalam hal ini, setiap anak diwarisi oleh init
proses, yang akan wait
pada anak itu, mengumpulkan status keluarnya dan menghapus entri di tabel proses.
Segera setelah orang tua dari suatu proses mati, proses menjadi yatim piatu - mengabaikan apakah itu zombie atau bukan. Apa yang terjadi pada anak yatim? Mereka mendapatkan orangtua baru, yang disebut init
. init
akan wait
pada setiap anak yatim yang dikumpulkan, sehingga menuai anak yatim (yang mungkin juga menjadi zombie juga).
init
tidak membunuh proses apa pun . Hanyawait
pada anak-anaknya untuk mengumpulkan status mereka.Tidak, tidak ada mekanisme pembersihan bawaan untuk zombie. Zombi pergi ke surga zombie setelah orang tua mereka terbunuh. Sampai saat itu, OS menjaga mereka untuk mengembalikan status keluar ke induk.
sumber
init
proses mengambil alih dan akan memanggilwait
itu