GNU/Linux >> Belajar Linux >  >> Linux

Cara mematikan proses Zombie di Linux

Proses zombie di Linux mengacu pada proses yang sudah mati tetapi, dalam satu atau lain cara, masih ada di tabel proses sistem. Celahnya adalah, untuk beberapa alasan, proses ini tidak dibersihkan oleh induk dari tabel proses. Biasanya, ini terjadi setelah proses eksekusi selesai.

Cara operasi yang biasa di Linux adalah bahwa setelah proses menyelesaikan eksekusinya, ia memberi tahu induknya, yang bertanggung jawab untuk menghapus proses dari tabel. Sayangnya, orang tua tidak dapat menghapus proses dari memori jika orang tua tidak dapat membaca status anak. Ini adalah bagaimana kita memiliki proses mati di tabel proses. Inilah yang kami sebut proses zombie.

Apa yang menyebabkan proses Linux Zombie?

Saat proses anak dibuat, proses induk yang ditulis dengan buruk mungkin gagal memanggil fungsi wait(). Akibatnya, anak-anak zombienya akan berlama-lama di ingatan sampai mereka padam.

Ini berarti bahwa tidak ada yang memantau proses bayi untuk perubahan status, dan sinyal SIGCHLD akan diabaikan. Mungkin aplikasi lain mengganggu eksekusi proses induk, baik melalui pemrograman yang buruk atau niat jahat.

Tata graha sistem yang tepat tidak akan terjadi jika proses induk tidak mengawasi perubahan status dalam proses anak.

Ketika proses bayi selesai, PCB dan entri dalam tabel proses tidak akan dihapus. Status zombie tidak pernah dihapus dari PCB sebagai akibatnya.

Zombi memang memiliki beberapa memori, tetapi biasanya tidak menjadi masalah. Karena sistem Linux memiliki jumlah PID yang terbatas (walaupun jumlahnya banyak), jika PID yang di-zombi cukup banyak, tidak ada proses lain yang dapat dimulai. Hal ini diragukan akan terjadi.

Namun, proses zombie menunjukkan bahwa ada yang tidak beres dengan aplikasi dan program tertentu mungkin memiliki bug.
Bug perangkat lunak di pusat data tidak boleh ditoleransi dan harus diatasi.
Anda harus mengawasi keluar dan hancurkan proses zombie sampai kesalahan diperbaiki.

ID proses tidak dapat digunakan kembali sampai diluncurkan, jadi entri tabel proses kecil.
Karena PCB jauh lebih besar daripada entri tabel proses dalam sistem operasi 64-bit, ini tidak mungkin menimbulkan masalah .

Jumlah memori yang tersedia untuk proses lain dapat dipengaruhi oleh sejumlah besar zombie. Namun, jika Anda memiliki banyak zombie, Anda memiliki masalah yang parah dengan aplikasi induk atau bug di sistem operasi.

Jadi, apa yang Anda lakukan ketika prosedur berubah menjadi zombie? Anda melacak dan menghilangkan proses zombie.

Bagaimana menemukan proses zombie?

Perhentian awal untuk membunuh proses zombie dalam sistem adalah yang pertama mengidentifikasinya. Karena proses init membersihkan zombie secara teratur, yang harus Anda lakukan untuk menyingkirkannya adalah menghancurkan proses yang menciptakannya.

Perintah teratas adalah cara cepat untuk melihat apakah ada zombie di area Anda. Untuk mencapai ini, kita akan menjalankan perintah berikut.

top

Jumlah proses zombie dalam sistem ini akan ditampilkan pada output. Dalam kasus kita di atas, kita memiliki 0 zombie.
Menggunakan perintah ps dan memasukkannya ke egrep, kita bisa mendapatkan daftarnya. Bendera negara untuk proses zombie adalah "Z", dan terkadang Anda juga akan melihat "mati".

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

Mari kita uraikan berbagai bagian dari perintah ini.

Z di kolom STAT dari output mengidentifikasi proses zombie.
[mati] di kolom (COMMAND) terakhir dari output juga mengidentifikasi proses zombie.

Idealnya, tidak mungkin membunuh proses Zombie karena sudah mati. Sebagai gantinya, kami memberi tahu orang tua untuk mencoba dan membaca status proses anak dan akhirnya membersihkannya dari tabel sistem. Untuk memicu proses ini, kami mengirim sinyal SIGCHLD ke induk proses. Mengidentifikasi ID proses induk atau yang disebut PID melibatkan menjalankan perintah berikut:

tuts@fosslinux:~$ ps -o ppid= <Child PID>

Setelah mendapatkan PID Zombie, gunakan perintah sinyal SIGCHLD ke proses induk yang telah diidentifikasi sebelumnya.

tuts@fosslinux:~$ kill -s SIGCHLD <Parent PID>

Dalam beberapa kasus, ini tidak menghapus proses Zombie. Ini memanggil kita untuk terlibat dalam rencana b atau c. Prior memerlukan memulai kembali proses induk atau mematikan proses induk. Di sisi lain, kasus terakhir melibatkan melakukan reboot sistem, terutama ketika proses Zombie dapat menyebabkan pemadaman atau lonjakan besar-besaran karena proses Zombie.

Di bawah ini adalah perintah untuk mematikan proses induk.

tuts@fosslinux:~$ kill -9 <Parent PID>

Jika proses induk dimatikan, dengan ekstensi, semua proses anak dari induk yang diberikan juga dimatikan. Jika salah satu proses anak sangat penting pada waktu tertentu, Anda mungkin perlu menunda pembunuhan sampai aman. Di sisi lain, pemeriksaan ulang cepat dapat memberi tahu Anda berapa banyak memori atau daya pemrosesan yang dikonsumsi oleh proses Zombie. Ini membantu menentukan apakah opsi yang lebih baik adalah mematikan prosesor induk untuk melakukan boot ulang sistem dalam siklus pemeliharaan sistem berikut yang sudah dijadwalkan.

Di Linux, bagaimana cara kerja status proses?

Tentu saja, Linux harus melacak semua aplikasi dan daemon yang berjalan di komputer Anda. Mempertahankan tabel proses adalah salah satu cara untuk menyelesaikannya.
Ini adalah daftar struktur memori kernel. Daftar ini mencakup entri untuk setiap proses yang berisi beberapa informasi tentangnya. Setiap struktur tabel proses berisi informasi yang sangat sedikit.

Mereka menyimpan ID proses, beberapa informasi lain, dan penunjuk ke blok kontrol proses (PCB).

PCB adalah tempat Linux menyimpan semua informasi yang dibutuhkan untuk mencari atau mengatur untuk setiap proses. Saat sebuah proses dibuat, proses tersebut dimodifikasi, diberikan waktu pemrosesan, dan kemudian dihancurkan.

Ada lebih dari 95 bidang di PCB Linux. Ini didefinisikan dalam struktur tugas, yang panjangnya lebih dari 700 baris. Jenis informasi berikut dapat ditemukan di PCB:

Status proses diilustrasikan di bawah

  • Nomor Proses:Pengidentifikasi khusus sistem operasi.
  • Program Counter:Ketika proses ini diberikan akses lagi ke CPU, sistem akan menggunakan alamat ini untuk menemukan instruksi selanjutnya dari proses yang akan dieksekusi.
  • Register:Prosedur ini menggunakan daftar register CPU yang disebut register. Akumulator, register indeks, dan penunjuk tumpukan dapat disertakan dalam daftar.
  • Buka Daftar File:File yang terkait dengan prosedur ini disertakan dalam Daftar File Terbuka.
  • Informasi Penjadwalan CPU:Digunakan untuk menghitung seberapa sering dan berapa lama proses ini menerima waktu pemrosesan CPU.
    PCB harus mencatat prioritas proses, penunjuk ke antrian penjadwalan, dan parameter penjadwalan lainnya.
  • Informasi Manajemen Memori:Informasi tentang memori yang digunakan proses ini, seperti alamat awal dan akhir memori proses, serta penunjuk ke halaman memori.
  • Informasi tentang status I/O:Perangkat apa pun yang digunakan proses sebagai input atau output.

Salah satu dari berikut ini dapat menjadi "Status Proses":

  • R:Proses yang berjalan atau dapat dijalankan. Itu sedang berjalan, yang berarti mendapatkan dan mengeksekusi siklus CPU.
    Prosedur yang siap dijalankan sedang menunggu slot CPU.
  • S:Tindakan tidur.
    Proses menunggu penyelesaian tindakan, seperti operasi input atau output. Atau ketersediaan sumber daya.
  • D:Prosedur dalam keadaan tidur tanpa gangguan. Ini menggunakan panggilan sistem pemblokiran, yang berarti tidak akan dilanjutkan sampai panggilan sistem selesai. Berbeda dengan status “Sleep”, proses dalam status ini tidak akan merespons sinyal hingga panggilan sistem selesai dan eksekusi telah kembali ke proses.
  • T:Karena mendapat sinyal SIGSTOP, maka proses telah berakhir (stop).
    Hanya akan merespon sinyal SIGKILL atau SIGCONT, baik mematikan atau menginstruksikan proses untuk melanjutkan. Saat Anda beralih dari tugas latar depan (fg) ke latar belakang (bg), ini terjadi.
  • Z:singkatan dari Zombie Process. Ketika suatu proses selesai, itu tidak hilang begitu saja. Alih-alih, ia membebaskan memori apa pun yang sedang digunakan dan keluar dari memori, tetapi entri tabel proses dan PCB-nya tetap ada.
    Statusnya disetel ke EXIT ZOMBIE, dan proses induknya diberi tahu bahwa proses bayi telah diselesaikan melalui Sinyal SIGCHLD.

Kesimpulan

Kecuali mereka bagian dari gerombolan besar, Zombie tidak begitu berbahaya. Beberapa bukan masalah besar, dan reboot cepat akan menghapusnya. Namun, ada satu hal yang perlu dipertimbangkan.

Arsitektur Linux memiliki jumlah proses maksimum dan, sebagai hasilnya, jumlah nomor ID proses maksimum. Ketika jumlah maksimum proses zombie komputer tercapai, proses baru tidak dapat dimulai.

Proses zombie bukanlah proses; mereka adalah sisa-sisa proses mati yang proses induknya belum dibersihkan dengan benar. Namun, jika Anda melihat bahwa aplikasi atau proses tertentu terus-menerus memunculkan zombie, Anda harus menyelidiki lebih lanjut.

Kemungkinan besar, itu hanya program yang ditulis dengan buruk; dalam hal ini, mungkin ada versi terbaru yang dibersihkan setelah turunannya diproses dengan benar.


Linux
  1. Cara mematikan proses zombie di Linux

  2. Cara Menemukan dan Membunuh Proses Zombie di Linux

  3. Apa Proses Zombie Dan Bagaimana Menemukan &Membunuh Proses Zombie?

  1. Cara Membunuh Proses yang Berjalan di Linux

  2. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  3. Linux:Temukan dan Bunuh Proses Zombie

  1. Cara mematikan proses atau menghentikan program di Linux

  2. Cara membunuh proses zombie

  3. Cara Menjeda/Melanjutkan Proses di Linux