Apa itu Proses Zombie di Linux?
Jika Anda seorang pengguna Linux, Anda mungkin telah melihat proses zombie berjalan di sekitar daftar proses Anda. Anda tidak dapat membunuh proses zombie karena sudah mati - seperti zombie yang sebenarnya.
Zombi pada dasarnya adalah sisa dari proses mati yang belum dibersihkan dengan benar. Sebuah program yang menciptakan proses zombie tidak diprogram dengan benar - program tidak seharusnya membiarkan proses zombie bertahan.
Kredit Gambar: Daniel Hollister on Flickr (Remixed)
Apa itu Proses Zombie?
Untuk memahami apa proses zombie dan apa yang menyebabkan proses zombie muncul, Anda harus memahami sedikit tentang bagaimana proses bekerja di Linux.
Ketika sebuah proses mati di Linux, itu tidak semua dihapus dari memori segera - deskriptor prosesnya tetap dalam memori (deskriptor proses hanya membutuhkan sejumlah kecil memori). Status proses menjadi EXIT_ZOMBIE dan induk proses diberitahu bahwa proses anaknya telah mati dengan sinyal SIGCHLD. Proses induk kemudian diharapkan untuk menjalankan sistem panggilan wait () untuk membaca status keluar proses yang mati dan informasi lainnya. Ini memungkinkan proses induk untuk mendapatkan informasi dari proses yang mati. Setelah wait () dipanggil, proses zombie sepenuhnya dihapus dari memori.
Ini biasanya terjadi sangat cepat, sehingga Anda tidak akan melihat proses zombie menumpuk di sistem Anda. Namun, jika proses induk tidak diprogram dengan benar dan tidak pernah memanggil tunggu (), anak-anak zombie-nya akan bertahan dalam memori sampai mereka dibersihkan.
Utilitas seperti GNOME System Monitor, the teratas perintah, dan ps perintah menampilkan proses zombie.
Bahaya Proses Zombie
Proses zombie tidak menggunakan sumber daya sistem apa pun. (Sebenarnya, masing-masing menggunakan sejumlah kecil memori sistem untuk menyimpan deskriptor prosesnya.) Namun, setiap proses zombie mempertahankan ID prosesnya (PID). Sistem Linux memiliki jumlah ID proses yang terbatas - 32767 secara default pada sistem 32-bit. Jika zombie terakumulasi pada tingkat yang sangat cepat - misalnya, jika perangkat lunak server yang tidak terprogram menciptakan proses zombie di bawah beban - seluruh kumpulan PID yang tersedia pada akhirnya akan ditugaskan untuk proses zombie, mencegah proses lain dari meluncurkan.
Namun, beberapa proses zombie yang berkeliaran tidak masalah - meskipun mereka menunjukkan bug dengan proses induknya di sistem Anda.
Menyingkirkan Proses Zombie
Anda tidak dapat membunuh proses zombie karena Anda dapat membunuh proses normal dengan sinyal SIGKILL - proses zombie sudah mati. Ingatlah bahwa Anda tidak perlu menyingkirkan proses zombie kecuali Anda memiliki jumlah besar pada sistem Anda - beberapa zombie tidak berbahaya. Namun, ada beberapa cara untuk menghilangkan proses zombie.
Salah satu caranya adalah dengan mengirimkan sinyal SIGCHLD ke proses induk. Sinyal ini memberi tahu proses induk untuk menjalankan panggilan tunggu () sistem dan membersihkan anak-anak zombie-nya. Kirim sinyal dengan membunuh perintah, ganti pid dalam perintah di bawah ini dengan PID proses induk:
kill -s pid SIGCHLD
Namun, jika proses induk tidak diprogram dengan benar dan mengabaikan sinyal SIGCHLD, ini tidak akan membantu. Anda harus membunuh atau menutup proses induk zombie. Ketika proses yang menciptakan zombie berakhir, init mewarisi proses zombie dan menjadi orangtua baru mereka. (init adalah proses pertama yang dimulai pada Linux saat boot dan diberikan PID 1.) init secara berkala menjalankan wait () system call untuk membersihkan anak-anak zombie-nya, sehingga init akan membuat pekerjaan singkat dari zombie. Anda dapat memulai kembali proses induk setelah menutupnya.
Jika proses induk terus membuat zombie, itu harus diperbaiki sehingga benar memanggil wait () untuk menuai anak-anak zombie-nya. Ajukan laporan bug jika program di sistem Anda terus membuat zombie.