If-Koubou

Apa itu "Proses Zombie" di Linux?

Apa itu "Proses Zombie" di Linux? (Bagaimana caranya)

Jika Anda pengguna Linux, Anda mungkin telah melihat proses zombie berguncang di sekitar daftar proses Anda. Anda tidak dapat membunuh proses zombie karena sudah mati - seperti zombie yang sebenarnya.

Zombie pada dasarnya adalah sisa dari proses mati yang belum dibersihkan dengan benar. Program yang menciptakan proses zombie tidak diprogram dengan benar - program tidak seharusnya membiarkan proses zombie bertahan.

Kredit Gambar: Daniel Hollister di Flickr (Remixed)

Apa itu Proses Zombie?

Untuk memahami apa itu proses zombie dan apa yang menyebabkan proses zombie muncul, Anda harus memahami sedikit tentang cara kerja proses di Linux.

Ketika sebuah proses mati di Linux, itu tidak semua dihapus dari memori segera - deskriptor prosesnya tetap dalam memori (proses deskriptor hanya membutuhkan sejumlah kecil memori). Status proses menjadi EXIT_ZOMBIE dan orang tua prosesnya diberitahu bahwa proses anaknya telah mati dengan sinyal SIGCHLD. Proses induk kemudian seharusnya mengeksekusi tunggu () system call untuk membaca status keluar dari proses mati dan informasi lainnya. Ini memungkinkan proses orang tua untuk mendapatkan informasi dari proses mati. Setelah menunggu () dipanggil, proses zombie benar-benar dihapus dari memori.

Ini biasanya terjadi sangat cepat, sehingga Anda tidak akan melihat proses zombie terakumulasi di sistem Anda. Namun, jika proses induk tidak diprogram dengan benar dan tidak pernah memanggil tunggu (), anak-anak zombie akan tetap tinggal di dalam memori sampai mereka dibersihkan.

Utilitas seperti Monitor Sistem GNOME, teratas perintah, dan ps display perintah proses zombie.

Bahaya Proses Zombie

Proses zombie tidak menggunakan sumber daya sistem apa pun. (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 ID proses berhingga - 32767 secara default pada sistem 32-bit. Jika zombie terakumulasi pada tingkat yang sangat cepat - misalnya, jika perangkat lunak server yang tidak terprogram membuat proses zombie di bawah beban - seluruh kumpulan PID yang tersedia pada akhirnya akan ditetapkan ke proses zombie, mencegah proses lain dari peluncuran.

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 Anda dapat menyingkirkan proses zombie.

Salah satu caranya adalah dengan mengirimkan sinyal SIGCHLD ke proses induk. Sinyal ini memberitahu proses induk untuk mengeksekusi tunggu () system call dan membersihkan anak-anak zombie-nya. Kirim sinyal dengan membunuh perintah, mengganti pid pada perintah di bawah ini dengan PID proses induk:

bunuh -s SIGCHLD pid

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 induk baru mereka. (Init adalah proses pertama yang dimulai pada Linux saat boot dan ditugaskan PID 1.) secara berkala menjalankan perintah tunggu () sistem untuk membersihkan anak-anak zombie, sehingga init akan membuat pekerjaan singkat dari zombie. Anda dapat memulai ulang proses induk setelah menutupnya.

Jika proses induk terus menciptakan zombie, itu harus diperbaiki sehingga benar memanggil menunggu () untuk menuai anak-anak zombie. Laporkan laporan bug jika program di sistem Anda terus membuat zombi.