Apa itu Proses Zombie?

Proses zombie adalah contoh program komputer yang menyimpan catatan tabel proses meskipun telah selesai dieksekusi. Proses yang tidak berfungsi seperti ini biasanya dikaitkan dengan Unix® dan sistem operasi serupa lainnya karena cara mereka menangani proses anak. Ketika proses anak telah selesai dieksekusi, orang tua biasanya bertanggung jawab untuk menghapusnya dari tabel proses. Biasanya tidak mungkin untuk menghapus proses zombie secara langsung dengan perintah kill, meskipun induknya sering kali dapat dibuat untuk menghapusnya jika operator menggunakan notifikasi anak sinyal (SIGCHLD). Jika gagal, proses zombie dapat dihapus secara tidak langsung dengan membunuh induknya.

Proses zombie adalah istilah deskriptif metaforis yang mengacu pada orang mati yang masih hidup. Proses yang tidak berfungsi di Unix® dan sistem operasi serupa dapat dilihat sebagai analog dengan zombie karena mereka mempertahankan keberadaan tabel proses meskipun tidak lagi melakukan fungsi yang dimaksudkan. Ketika suatu proses telah selesai dieksekusi kadang-kadang dikatakan telah mati, sedangkan cara sistem operasi memulihkan alokasi tabel prosesnya dapat dikenal sebagai menuai. Proses induk zombie secara teknis seharusnya menuai anak-anaknya, meskipun ini tidak selalu terjadi.

Ada kasus tertentu di mana keberadaan proses zombie mungkin disengaja atau bahkan diinginkan. Setelah proses anak berhenti dieksekusi, orang tua mungkin perlu menjalankan instance lain dari program yang sama nanti. Jika zombie belum dihapus dari tabel proses, anak baru tidak akan diberi identifikasi (ID) yang sama dengan anak lama. Program tertentu mungkin mendapat manfaat dari atau bahkan memerlukan diferensiasi semacam ini.

Jika proses induk belum menjalankan perintah wait untuk menuai zombie yang menjadi tanggung jawabnya, masalah tersebut mungkin dipaksakan. Ini biasanya dilakukan melalui perintah kill dan mengirimkan sinyal SIGCHLD ke proses induk. Jika semuanya bekerja dengan baik, proses induk yang menerima sinyal ini harus menuai anak-anak zombienya sehingga ID dan posisi tabel proses mereka dapat digunakan kembali.

Dalam keadaan tertentu, proses induk dapat mengabaikan sinyal SIGCHLD. Jika ini terjadi dan operator masih menginginkan tabel proses dikosongkan, proses induk dapat dihentikan. Setiap zombie yang dibuat oleh proses induk kemudian akan ditetapkan sebagai anak-anak untuk proses init. Karena init secara berkala memulai perintah wait pada anak-anaknya, semua zombie yang menjadi tanggung jawabnya pada akhirnya akan dihapus dari tabel proses.