20Aug
Jika Anda pengguna Linux, mungkin Anda telah melihat proses zombie terhuyung-huyung di sekitar daftar proses Anda. Anda tidak bisa membunuh proses zombie karena sudah mati - seperti zombie yang sebenarnya.
Zombie pada dasarnya adalah potongan sisa proses mati yang belum dibersihkan dengan baik. Sebuah program yang menciptakan proses zombie tidak diprogram dengan benar - program tidak seharusnya membiarkan proses zombie tetap ada.
Image Credit: Daniel Hollister di Flickr( Remixed)
Apa Proses Zombie?
Untuk memahami proses zombie dan apa yang menyebabkan proses zombie muncul, Anda harus sedikit memahami bagaimana proses bekerja di Linux.
Ketika sebuah proses mati di Linux, tidak semua segera dihapus dari ingatan - deskriptor prosesnya tetap berada di memori( deskriptor proses hanya memerlukan sedikit memori).Status proses menjadi EXIT_ZOMBIE dan orang tua proses diberitahu bahwa proses anaknya telah meninggal dengan sinyal SIGCHLD.Proses induknya kemudian diharapkan bisa menjalankan wait() system call untuk membaca exit status proses mati dan informasi lainnya. Hal ini memungkinkan proses induk mendapatkan informasi dari proses mati. Setelah menunggu() dipanggil, proses zombie benar-benar dihapus dari memori.
Hal ini biasanya terjadi sangat cepat, sehingga Anda tidak akan melihat proses zombie terakumulasi di sistem Anda. Namun, jika proses orang tua tidak diprogram dengan benar dan tidak pernah menunggu panggilan() , anak-anak zombinya akan tetap tinggal di memori sampai mereka dibersihkan. Utilitas
seperti GNOME System Monitor, perintah atas , dan perintah menampilkan proses zombie.
Bahaya Proses Zombie Proses Zombie
tidak menggunakan sumber daya sistem apapun.(Sebenarnya, masing-masing menggunakan jumlah memori sistem yang sangat kecil untuk menyimpan deskriptor prosesnya.) Namun, setiap proses zombie mempertahankan ID prosesnya( PID).Sistem Linux memiliki jumlah proses ID yang terbatas - 32767 secara default pada sistem 32-bit. Jika zombie terakumulasi pada tingkat yang sangat cepat - misalnya, jika perangkat lunak server yang diprogram dengan tidak benar adalah proses zombie yang dibuat di bawah beban - seluruh kumpulan PID yang tersedia pada akhirnya akan ditugaskan ke proses zombie, mencegah proses lain diluncurkan.
Namun, beberapa proses zombie yang berkeliaran tidak masalah - meski menunjukkan bug dengan proses orang tua mereka di sistem Anda.
Menghilangkan Proses Zombie
Anda tidak dapat membunuh proses zombie karena Anda dapat membunuh proses normal dengan proses SIGKILL signal - zombie sudah mati. Ingatlah bahwa Anda tidak perlu menyingkirkan proses zombie kecuali jika Anda memiliki jumlah yang besar di sistem Anda - beberapa zombie tidak berbahaya. Namun, ada beberapa cara Anda bisa menyingkirkan proses zombie.
Salah satu cara adalah dengan mengirimkan sinyal SIGCHLD ke proses induk. Sinyal ini memberitahu proses induk untuk menjalankan wait() system call dan membersihkan anak-anak zombie-nya. Kirim sinyal dengan membunuh perintah , mengganti pid pada perintah di bawah ini dengan proses induknya PID:
membunuh -s SIGCHLD pid
Namun, jika proses induk tidak diprogram dengan benar dan mengabaikan sinyal SIGCHLD, ini berhasil dimenangkan.tolong bantuAnda 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 di Linux saat boot dan diberi PID 1.) init secara berkala menjalankan wait() system call untuk membersihkan anak zombie nya, jadi init akan membuat karya pendek zombie. Anda dapat memulai ulang proses induk setelah menutupnya.
Jika proses induk terus menciptakan zombie, itu harus diperbaiki agar benar panggilan wait() untuk menuai anak zombie nya. Mengajukan laporan bug jika sebuah program di sistem Anda terus menciptakan zombie.