Sebab mengapa Linux menjana zombi (proses zombie) ialah: selepas proses induk menjana proses anak, proses anak keluar sebelum proses induk, tetapi proses induk tidak memproses isyarat keluar yang dihantar oleh proses kanak-kanak, jadi proses kanak-kanak akan Ia dipanggil proses zombi pada masa ini, proses itu tidak boleh dibunuh menggunakan identiti akar Ia boleh diselesaikan dengan membunuh proses induk proses kanak-kanak.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
Punca:
Proses zombie, nama Inggeris adalah proses zombi, seperti namanya, ia adalah satu proses yang mati. Jadi apakah sebenarnya proses zombi?
Sebab mengapa proses zombi dijana ialah selepas proses induk mencipta proses anak, proses anak keluar sebelum proses induk, tetapi proses induk tidak memproses data yang dihantar oleh proses kanak-kanak kerana pelbagai sebab isyarat keluar, maka proses anak ini akan menjadi proses zombi.
Ini adalah apa yang dipanggil zombi (proses zombie) Ini bermakna semasa proses fork()/execve(), diandaikan bahawa proses induk masih wujud apabila proses anak tamat, dan induknya. proses belum memasang isyarat SIGCHLD sebelum fork() Jika fungsi pemprosesan memanggil waitpid() untuk menunggu proses anak tamat, dan tidak mengabaikan isyarat secara jelas, proses anak menjadi proses zombi dan tidak boleh berakhir seperti biasa kali ini, walaupun identiti akar membunuh -9 tidak boleh membunuh proses zombi. Ubatnya adalah untuk membunuh proses induk proses zombie (proses induk proses zombie mesti wujud). membersihkan proses zombi.
Proses zombie bermakna proses induk telah keluar, dan jika tiada proses menerima kematian proses, ia menjadi proses zombie (zombie)
Penyelesaian:
(1) Proses induk menunggu proses anak tamat melalui fungsi seperti wait dan waitpid, yang akan menyebabkan proses induk hang.
Apabila panggilan sistem wait() atau waitpid() dilaksanakan, proses anak akan mengembalikan datanya dalam jadual proses kepada proses induk sejurus selepas penamatan titik. Dalam kes ini, proses yang tidak berfungsi tidak akan dihasilkan.
(2) Jika proses induk sangat sibuk, anda boleh menggunakan fungsi isyarat untuk memasang pengendali untuk SIGCHLD. Selepas proses anak tamat, proses induk akan menerima isyarat dan boleh memanggil tunggu dalam pengendali untuk mengitar semula.
(3) Jika proses induk tidak mengambil berat apabila proses anak tamat, ia boleh menggunakan isyarat (SIGCLD, SIG_IGN) atau isyarat (SIGCHLD, SIG_IGN) untuk memberitahu kernel bahawa ia tidak berminat pada akhirnya daripada proses anak. Kemudian selepas proses anak tamat, kernel akan mengitar semula dan tidak lagi menghantar isyarat kepada proses induk
(4) Garpu dua kali proses induk dan kemudian terus berfungsi. Proses anak memotong proses cucu dan keluar , kemudian proses cucu diambil alih oleh init, dan selepas proses cucu tamat, init akan mengitar semulanya. Walau bagaimanapun, anda perlu melakukan kitar semula proses kanak-kanak itu sendiri.
Pembelajaran yang disyorkan: Tutorial video Linux
Atas ialah kandungan terperinci Apa yang menyebabkan zombi di Linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!