Laman » bagaimana untuk » Apa itu Proses Zombie di Linux?

    Apa itu Proses Zombie di Linux?

    Sekiranya anda seorang pengguna Linux, anda mungkin melihat proses zombie mengamati senarai proses anda. Anda tidak boleh membunuh proses zombie kerana sudah mati - seperti zombie sebenar.

    Zombi pada dasarnya adalah bit sisa proses mati yang belum dibersihkan dengan betul. Satu program yang mencipta proses zombie tidak diprogram dengan betul - program tidak sepatutnya membiarkan proses zombie melekat.

    Kredit Imej: Daniel Hollister di Flickr (Remixed)

    Apa itu Proses Zombie?

    Untuk memahami apa proses zombie dan apa yang menyebabkan proses zombie muncul, anda perlu memahami sedikit tentang bagaimana proses berfungsi di Linux.

    Apabila proses mati di Linux, semua ini tidak dialih keluar dari ingatan dengan serta-merta - deskriptor prosesnya kekal dalam memori (proses deskriptor hanya memerlukan sedikit memori). Status proses menjadi EXIT_ZOMBIE dan ibu bapa proses diberitahu bahawa proses anaknya telah mati dengan isyarat SIGCHLD. Proses induk kemudiannya seharusnya melaksanakan panggilan sistem tunggu () untuk membaca status keluar proses mati dan informasi lain. Ini membolehkan proses induk mendapatkan maklumat dari proses mati. Selepas menunggu () dipanggil, proses zombie dikeluarkan sepenuhnya dari ingatan.

    Ini biasanya berlaku dengan sangat cepat, jadi anda tidak akan melihat proses zombie yang terkumpul di sistem anda. Walau bagaimanapun, jika proses induk tidak diprogram dengan betul dan tidak pernah menelpon tunggu (), anak zombie akan tetap dalam ingatan sehingga mereka dibersihkan.

    Utiliti seperti Sistem Pemantauan GNOME, yang atas perintah, dan ps proses zombi paparan perintah.

    Bahaya Proses Zombie

    Proses zombie tidak menggunakan sumber sistem apa pun. (Sebenarnya, setiap satu menggunakan jumlah memori sistem yang sangat kecil untuk menyimpan deskriptor prosesnya.) Walau bagaimanapun, setiap proses zombie mengekalkan ID prosesnya (PID). Sistem Linux mempunyai bilangan ID proses yang terhingga - 32767 secara lalai pada sistem 32-bit. Jika zombi berkumpul pada kadar yang sangat cepat - contohnya, jika perisian pelayan yang diprogramkan dengan betul mencipta proses zombie di bawah beban - keseluruhan kolam PID yang tersedia akhirnya akan ditugaskan untuk proses zombie, menghalang proses lain daripada melancarkan.

    Walau bagaimanapun, beberapa proses zombie yang berkeliaran tidak ada masalah - walaupun mereka menunjukkan pepijat dengan proses induk mereka pada sistem anda.

    Menghapuskan Proses Zombie

    Anda tidak boleh membunuh proses zombie kerana anda boleh membunuh proses normal dengan isyarat SIGKILL - proses zombie sudah mati. Perlu diingat bahawa anda tidak perlu menyingkirkan proses zombi melainkan anda mempunyai jumlah yang besar pada sistem anda - beberapa zombi tidak berbahaya. Walau bagaimanapun, terdapat beberapa cara anda boleh menyingkirkan proses zombie.

    Salah satu cara adalah dengan menghantar isyarat SIGCHLD kepada proses induk. Isyarat ini memberitahu proses induk untuk melaksanakan panggilan tunggu () sistem dan membersihkan anak zombienya. Hantar isyarat dengan bunuh perintah, menggantikan pid dalam arahan di bawah dengan PID proses induk:

    membunuh -s SIGCHLD pid

    Walau bagaimanapun, jika proses induk tidak diprogram dengan betul dan mengabaikan isyarat SIGCHLD, ini tidak akan membantu. Anda perlu membunuh atau menutup proses ibu bapa zombi. Apabila proses yang mencipta zombi berakhir, init mewarisi proses zombie dan menjadi ibu bapa mereka yang baru. (init adalah proses pertama yang bermula pada Linux pada boot dan ditugaskan PID 1.) init secara berkala melaksanakan panggilan tunggu () sistem panggilan untuk membersihkan anak-anak zombienya, sehingga init akan membuat kerja pendek dari zombie. Anda boleh memulakan semula proses induk selepas menutupnya.

    Sekiranya proses ibu bapa terus mencipta zombi, ia harus diperbaiki supaya ia betul-betul memanggil menunggu () untuk menuai anak zombienya. Isikan laporan pepijat jika program pada sistem anda terus membuat zombi.