Belajar Linux

Cara membunuh proses Zombie di Linux

Cara membunuh proses Zombie di Linux

Proses zombie di Linux merujuk kepada proses yang sudah mati tetapi, dalam satu atau lain cara, masih terdapat dalam jadual proses sistem. Kekurangannya adalah bahawa, untuk beberapa sebab, proses ini tidak dibersihkan oleh ibu bapa dari jadual proses. Biasanya, ini berlaku setelah selesai proses pelaksanaan.

Cara operasi yang biasa di Linux adalah bahawa setelah proses menyelesaikan pelaksanaannya, ia memberitahu induknya, yang bertanggung jawab untuk membuang proses dari jadual. Malangnya, ibu bapa tidak dapat mengeluarkan proses dari ingatan sekiranya ibu bapa tidak dapat membaca status anak. Ini adalah bagaimana kita mempunyai proses mati dalam jadual proses. Inilah yang kita sebut sebagai proses zombie.

Apa yang menyebabkan proses Linux Zombie?

Semasa proses anak dibuat, proses ibu bapa yang ditulis dengan teruk mungkin gagal memanggil fungsi tunggu (). Akibatnya, anak-anak zombie akan berlama-lama dalam ingatan sehingga mereka dipadamkan.

Ini bermaksud bahawa tidak ada yang memantau proses bayi untuk perubahan keadaan, dan isyarat SIGCHLD akan diabaikan. Mungkin aplikasi lain mengganggu pelaksanaan proses induk, baik melalui pengaturcaraan yang buruk atau niat jahat.

Pengemasan sistem yang betul tidak akan berlaku sekiranya proses ibu bapa tidak memerhatikan perubahan keadaan dalam proses anak.

Apabila proses bayi selesai, PCB dan catatan dalam jadual proses tidak akan dikeluarkan. Keadaan zombie tidak pernah dikeluarkan dari PCB akibatnya.

Zombie mempunyai sedikit memori, tetapi biasanya tidak menjadi masalah. Oleh kerana sistem Linux mempunyai bilangan PID yang terhad (walaupun sebilangan besar), jika cukup PID zombi, tidak ada proses lain yang dapat dimulakan. Sudah pasti perkara ini akan berlaku.

Walau bagaimanapun, proses zombi menunjukkan bahawa ada sesuatu yang salah dengan aplikasi dan bahawa program tertentu mungkin mempunyai pepijat.
Kesalahan perisian di pusat data tidak boleh ditoleransi dan mesti ditangani.
Anda harus mengawasi dan menghancurkan proses zombie sehingga kesalahannya diperbaiki.

ID proses tidak dapat digunakan semula sehingga dilancarkan, jadi entri jadual proses sangat kecil.
Kerana PCB jauh lebih besar daripada entri jadual proses dalam sistem operasi 64-bit, ini tidak mungkin menimbulkan masalah.

Jumlah memori yang tersedia untuk proses lain mungkin dipengaruhi oleh sebilangan besar zombi. Walau bagaimanapun, jika anda mempunyai banyak zombi, anda menghadapi masalah teruk dengan aplikasi induk atau bug dalam sistem operasi.

Jadi, apa yang anda lakukan apabila prosedur berubah menjadi zombie? Anda mengesan dan menghilangkan proses zombie.

Cara mencari proses zombie?

Hentian awal untuk membunuh proses zombie dalam sistem adalah yang pertama mengenalinya. Kerana proses init membersihkan selepas zombi secara berkala, yang harus anda lakukan untuk menyingkirkannya adalah menghancurkan proses yang membuatnya.

Perintah teratas adalah cara cepat untuk melihat apakah terdapat zombie di kawasan anda. Untuk mencapainya, kami akan melaksanakan perintah berikut.

bahagian atas

keputusan arahan teratas

Jumlah proses zombie dalam sistem ini akan ditunjukkan pada output. Dalam kes kami di atas, kami mempunyai 0 zombi.
Dengan menggunakan perintah ps dan memasukkannya ke dalam egrep, kita boleh mendapatkan senarai dari mereka. Bendera negeri untuk proses zombie adalah "Z", dan kadang-kadang anda akan melihat "mati" juga.

tuts @ fosslinux: ~ $ ps aux | egrep "Z | tidak berfungsi"

Bendera negeri untuk proses zombie adalah Z atau tidak berfungsi

Mari pecahkan pelbagai bahagian arahan ini.

Z pada lajur STAT output mengenal pasti proses zombie.
[mati] pada lajur (PERINTAH) keluaran terakhir juga mengenal pasti proses zombie.

Sebaik-baiknya, tidak mungkin membunuh proses Zombie kerana sudah mati. Sebaliknya, kami memberitahu ibu bapa untuk mencuba dan membaca status proses anak dan akhirnya membersihkannya dari jadual sistem. Untuk mencetuskan proses ini, kami menghantar isyarat SIGCHLD kepada ibu bapa proses tersebut. Mengenal pasti ID proses induk atau apa yang dipanggil PID melibatkan menjalankan arahan berikut:

tuts @ fosslinux: ~ $ ps -o ppid = 

Mengenal pasti ID proses ibu bapa

Setelah mendapat PID Zombie, gunakan arahan isyarat SIGCHLD untuk proses induk yang dikenal pasti sebelumnya.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

gunakan isyarat arahan SIGCHLD

Dalam beberapa kes, ini tidak menjelaskan proses Zombie. Ini memanggil kita untuk terlibat dalam rancangan b atau c. Yang terdahulu memerlukan memulakan semula proses induk atau membunuh proses induk. Sebaliknya, kes yang terakhir melibatkan melakukan reboot sistem, terutama ketika proses Zombie dapat menyebabkan pemadaman atau lonjakan besar kerana proses Zombie.

Di bawah ini adalah arahan untuk membunuh proses induk.

tuts @ fosslinux: ~ $ bunuh -9 

arahan untuk membunuh proses ibu bapa

Sekiranya proses ibu bapa dibunuh, secara ekstensif, semua proses anak dari ibu bapa yang diberikan juga dibunuh. Sekiranya salah satu proses kanak-kanak itu kritikal pada waktu tertentu, anda mungkin perlu menangguhkan pembunuhan sehingga selamat. Sebaliknya, pemeriksaan dua kali yang cepat dapat memberitahu anda berapa banyak memori atau daya pemprosesan yang digunakan oleh proses Zombie. Ini membantu menentukan apakah pilihan yang lebih baik adalah dengan membunuh pemproses induk untuk melakukan reboot sistem dalam kitaran penyelenggaraan sistem berikut yang sudah dijadualkan.

Di Linux, bagaimana keadaan proses berfungsi?

Sudah tentu, Linux mesti mengawasi semua aplikasi dan daemon yang berjalan di komputer anda. Menyelenggara jadual proses adalah salah satu cara untuk menyelesaikannya.
Ini adalah senarai struktur memori kernel. Senarai ini merangkumi entri untuk setiap proses yang mengandungi beberapa maklumat mengenainya. Setiap struktur jadual proses mengandungi sedikit maklumat.

Mereka menyimpan ID proses, beberapa maklumat lain, dan petunjuk ke blok kawalan proses (PCB).

PCB adalah tempat Linux menyimpan semua maklumat yang diperlukan untuk mencari atau menetapkan untuk setiap proses. Semasa proses dibuat, ia diubah, diberi masa pemprosesan, dan kemudian dihancurkan.

Terdapat lebih daripada 95 bidang di Linux Linux. Ini ditentukan dalam struktur tugas, yang panjangnya melebihi 700 baris. Jenis maklumat berikut boleh didapati di PCB:

Keadaan proses digambarkan di bawah

Mana-mana perkara berikut boleh menjadi "Status Proses":

Kesimpulannya

Kecuali mereka adalah sebahagian daripada gerombolan yang besar, Zombi tidak begitu berbahaya. Sebilangan kecil bukan masalah besar, dan but semula cepat akan membersihkannya. Namun, ada satu perkara yang perlu dipertimbangkan.

Arkitek Linux mempunyai bilangan proses maksimum dan, sebagai hasilnya, bilangan maksimum ID nombor proses. Apabila bilangan proses zombie maksimum komputer dicapai, proses baru tidak dapat dimulakan.

Proses zombie bukan proses; mereka adalah sisa-sisa proses mati yang tidak dibersihkan oleh proses induk mereka. Walau bagaimanapun, jika anda melihat bahawa aplikasi atau proses tertentu selalu melahirkan zombi, anda harus menyiasat lebih lanjut.

Kemungkinan besar, ini hanyalah program yang tidak ditulis dengan baik; dalam kes itu, mungkin ada versi yang diperbaharui yang membersihkannya setelah anaknya memproses dengan betul.

Cara menangkap dan streaming sesi permainan anda di Linux
Pada masa lalu, bermain permainan hanya dianggap sebagai hobi, tetapi seiring dengan berjalannya waktu, industri permainan menyaksikan pertumbuhan yan...
Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...
Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...