Proses zombie tidak akan berdampak pada kinerja atau kelambatan karena proses zombie tidak menggunakan sumber daya sistem apa pun.
Catatan: - Secara praktis, masih menggunakan PID (yang merupakan sumber daya terbatas), dan struktur data kernel untuk proses masih dialokasikan. Biasanya, ini tidak masalah, tetapi penggunaan memori kernel bisa signifikan pada sistem dengan memori yang sangat terbatas.
Masalah yang disebabkan oleh proses zombie
Setiap proses zombie mempertahankan ID prosesnya. Sistem Linux memiliki jumlah ID proses yang terbatas - 32767 secara default pada sistem 32-bit. Jika zombie terakumulasi pada tingkat yang sangat cepat, seluruh kumpulan PID yang tersedia pada akhirnya akan ditugaskan untuk proses zombie, mencegah proses lain dari peluncuran.
Catatan : Pada sistem 64-bit, Anda dapat meningkatkan PID maksimum, lihat /unix//a/16884/170373
Namun, beberapa proses zombie yang berkeliaran tidak masalah - meskipun mereka menunjukkan bug dengan proses induknya di sistem Anda.
Penjelasan:
Ketika sebuah proses mati di Linux, itu tidak semua dihapus dari memori segera - deskriptor prosesnya tetap dalam memori.
Status proses menjadi EXIT_ZOMBIE
dan proses orangtua diberitahu bahwa proses anaknya telah mati dengan SIGCHLD
sinyal.
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.
Resolusi:
Anda tidak dapat membunuh proses zombie karena Anda dapat membunuh proses normal dengan sinyal SIGKILL - proses zombie sudah mati.
Salah satu cara untuk membunuh zombie 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 perintah kill, ganti pid pada perintah di bawah ini dengan PID proses induk:
kill -s SIGCHLD pid
Ketika proses yang menciptakan zombie berakhir, init mewarisi proses zombie dan menjadi orang tua baru mereka. (init adalah proses pertama yang dimulai pada Linux saat boot dan diberikan PID 1.)
Catatan: - Dari Linux 3.4 dan selanjutnya proses dapat mengeluarkan panggilan sistem prctl () dengan opsi PR_SET_CHILD_SUBREAPER, dan sebagai hasilnya, bukan proses # 1, akan menjadi induk dari proses turunan yatim piatu mereka. Refer: /unix//a/177361/5132
INIT kemudian mengeksekusi sistem panggilan wait () untuk membersihkan anak-anak zombie-nya, jadi init akan membuat zombie pendek bekerja. Anda dapat memulai kembali proses induk setelah menutupnya.
Sebagian besar, zombie bukan masalah besar. Mereka adalah proses 'mati'-ish, yang tidak membutuhkan waktu CPU, dan setiap memori yang dialokasikan seharusnya dibebaskan oleh proses sebelum mati. Satu-satunya sumber daya yang mereka ambil adalah entri dalam daftar proses Anda. Bergantung pada sistem Anda, Anda dapat memiliki jumlah utas maksimum yang dibolehkan, dan memiliki zombie dapat membuat Anda mencapai batas ini lebih cepat tanpa alasan.
Namun: Zombies biasanya muncul karena kode buruk / bermasalah, di mana programmer lupa memeriksa status proses anaknya. Ini bisa disengaja, tetapi seringkali tidak. Kode buruk / kereta sering kali juga menangani memori dengan cara khusus yang
buruk, dan Tidak membebaskan beberapa sumber daya yang dialokasikan. Jika ini masalahnya, sumber daya ini akan tetap dialokasikan untuk zombie, sampai sepenuhnya dihentikan.Sunting : Jika prosesnya adalah program java, memori yang tidak dibebaskan seharusnya tidak menjadi masalah, karena pengumpul sampah java menangani semuanya.
sumber