Cara Membunuh Proses Zombie di Linux

Nov 25, 2024
Linux
Fatmawati Achmad Zaenuri / Shutterstock

Program yang ditulis dengan buruk atau berkinerja buruk dapat pergi Proses zombie mengintai di dalam komputer linux Anda. Cari tahu bagaimana zombie dibuat, dan bagaimana Anda akhirnya bisa meletakkannya untuk beristirahat.

Bagaimana keadaan proses bekerja di Linux

Linux, tentu saja, harus melacak semua aplikasi dan daemon yang berjalan di komputer Anda. Salah satu cara ini adalah dengan mempertahankan tabel proses. Ini adalah daftar struktur dalam memori kernel. Setiap proses memiliki entri dalam daftar ini yang berisi beberapa informasi tentang itu.

Tidak ada banyak hal di setiap struktur tabel proses. Mereka memegang ID Proses. , beberapa item data lainnya, dan pointer ke blok kontrol proses (PCB) untuk proses itu.

Ini adalah PCB yang menampung banyak detail Linux perlu mencari atau diatur untuk setiap proses. PCB juga diperbarui karena proses dibuat, diberikan waktu pemrosesan, dan akhirnya hancur.

Linux PCB berisi lebih dari 95 bidang. Ini didefinisikan sebagai struktur yang disebut task_struct.h. , dan panjangnya lebih dari 700 baris. PCB berisi jenis informasi berikut:

  • Keadaan proses : Negara-negara dijelaskan di bawah ini.
  • Proses nomor : Pengidentifikasi unik dalam sistem operasi.
  • Konter Program. : Ketika proses ini diberi akses ke CPU, sistem akan menggunakan alamat ini untuk menemukan instruksi selanjutnya dari proses yang harus dijalankan.
  • Register. : Daftar register CPU yang digunakan oleh proses ini. Daftar mungkin berisi akumulator, register indeks, dan tumpukan pointer.
  • Buka Daftar File : File yang terkait dengan proses ini.
  • Informasi Penjadwalan CPU. : Digunakan untuk menentukan seberapa sering, dan untuk berapa lama, waktu pemrosesan CPU diberikan untuk proses ini. Prioritas proses, pointer untuk antrian penjadwalan, dan parameter penjadwalan lainnya harus direkam dalam PCB.
  • Informasi Manajemen Memori : Rincian tentang memori proses ini menggunakan, seperti alamat awal dan akhir dari memori proses, dan pointer ke halaman memori.
  • Informasi Status I / O : Setiap perangkat in-atau output yang digunakan oleh proses.

"Status proses" dapat berupa salah satu dari yang berikut:

  • R: Proses berlari atau runnable. Berlari yang berarti menerima siklus CPU dan mengeksekusi. Proses yang runnable siap untuk dijalankan dan menunggu slot CPU.
  • S: Proses tidur. Proses ini sedang menunggu tindakan untuk diselesaikan, seperti operasi in-or output, atau untuk sumber daya tersedia.
  • D: Prosesnya dalam keadaan tidur yang tidak terputus. Ini menggunakan panggilan sistem pemblokiran dan tidak dapat melanjutkan sampai sistem panggilan selesai. Berbeda dengan negara "tidur", suatu proses dalam keadaan ini tidak akan merespons sinyal sampai panggilan sistem selesai dan eksekusi telah kembali ke proses.
  • T: Proses telah berakhir (dihentikan) karena menerima Sigstop. sinyal. Dia hanya akan merespons untuk Sigkill atau SIGCONT. Sinyal, yang dapat membunuh proses atau menginstruksinya untuk melanjutkan, masing-masing. Inilah yang terjadi ketika Anda bertukar latar depan ( fg. ) ke Latar Belakang ( bg) tugas.
  • Z: Proses zombie. Ketika suatu proses selesai, itu tidak hanya lenyap. Ini membebaskan setiap memori yang digunakan dan menghapus dirinya dari memori, tetapi entri dalam tabel proses dan PCB tetap ada. Keadaannya diatur ke Exit_Zombie. , dan proses induknya diberitahukan (oleh Sigchld. sinyal) bahwa proses anak telah selesai.

Dalam keadaan zombie, proses induk memanggil salah satu tunggu() keluarga fungsi ketika proses anak dibuat. Kemudian menunggu perubahan negara dalam proses anak. Apakah proses anak sudah dihentikan, dilanjutkan, atau dibunuh oleh sinyal? Apakah itu dihentikan dengan menjalankan penyelesaian kodenya?

Jika perubahan negara adalah salah satu yang berarti proses anak telah berhenti berjalan, kode keluarnya dibaca. Kemudian, PCB anak dihancurkan dan entri dalam tabel proses dihapus. Idealnya, ini semua terjadi dalam sekejap mata, dan proses dalam keadaan zombie tidak ada terlalu lama.

TERKAIT: Cara menjalankan dan mengontrol proses latar belakang di Linux

Apa yang menyebabkan proses zombie di Linux?

Proses induk yang ditulis dengan buruk mungkin tidak menelepon tunggu() berfungsi ketika proses anak dibuat. Ini berarti tidak ada yang mengawasi perubahan negara dalam proses anak, dan Sigchld. sinyal akan diabaikan. Atau, mungkin aplikasi lain mempengaruhi eksekusi proses induk, baik karena pemrograman yang buruk atau niat jahat.

Namun, jika proses induknya tidak menonton perubahan negara dalam proses anak, housekeeping sistem yang tepat tidak akan terjadi. PCB dan entri dalam tabel proses tidak akan dihapus ketika proses anak berakhir. Ini menghasilkan keadaan zombie tidak pernah dihapus dari PCB.

Zombies menggunakan sedikit memori, tetapi mereka biasanya tidak menimbulkan masalah. Entri dalam tabel proses kecil, tetapi, sampai dirilis, ID proses tidak dapat digunakan kembali. Pada sistem operasi 64-bit, itu tidak mungkin menyebabkan masalah apa pun karena PCB jauh lebih besar dari entri tabel proses.

Sejumlah besar zombie bisa, dapat dibayangkan, mempengaruhi jumlah memori yang gratis untuk proses lain. Jika Anda memiliki banyak zombie, Anda punya masalah serius dengan aplikasi induk atau bug sistem operasi.

Cara Menghapus Proses Zombie

Anda tidak dapat membunuh proses zombie karena sudah mati. Itu tidak akan menanggapi sinyal apa pun karena telah dihapus dari memori - tidak ada tempat untuk mengirim a Sigkill sinyal. Anda dapat mencoba mengirim Sigchld. sinyal ke proses induk, tetapi jika tidak berfungsi ketika proses anak dihentikan, itu tidak mungkin bekerja sekarang juga.

Satu-satunya solusi yang dapat diandalkan adalah membunuh proses induk. Ketika dihentikan, proses anaknya diwarisi oleh init Proses, yang merupakan proses pertama yang dijalankan dalam sistem Linux (ID prosesnya adalah 1).

NS init Proses secara teratur melakukan pembersihan zombie yang diperlukan, sehingga untuk membunuh mereka, Anda hanya perlu membunuh proses yang menciptakannya. NS atas Perintah adalah cara yang mudah untuk melihat apakah Anda memiliki zombie.

Ketikkan yang berikut:

  atas  

Sistem ini memiliki delapan proses zombie. Kita dapat mendaftar ini Dengan menggunakan ps. memerintah dan menyalakannya Egrep. . Sekali lagi, proses zombie memiliki bendera negara "Z," dan Anda biasanya juga melihat "mati."

Ketikkan yang berikut:

 PS AUX | egrep "z | defunt" 

Proses zombie terdaftar.

Ini adalah cara yang lebih rapi untuk menemukan proses proses zombie daripada menggulir bolak-balik atas . Kami juga melihat bahwa aplikasi bernama "Badprg" melahirkan zombie ini.

ID proses zombie pertama adalah 7641, tetapi kita perlu menemukan proses id dari proses induknya. Kita dapat melakukannya dengan menggunakan ps. lagi. Kami akan menggunakan opsi output ( -Hai ) untuk memberi tahu ps. hanya menampilkan ID proses orangtua, dan kemudian meneruskannya dengan ppid = bendera.

Proses yang ingin kami temukan akan ditunjukkan dengan menggunakan -P opsi (proses), dan kemudian melewati ID proses zombie.

Oleh karena itu, kami mengetikkan perintah berikut untuk mencari informasi proses untuk proses 7641, tetapi hanya akan melaporkan ID proses induk:

 PS -O PPID = -P 7641 

Kami diberitahu bahwa ID proses induk adalah 7636. Kami sekarang dapat merujuk silang ini dengan menggunakan ps. sekali lagi.

Kami melihat ini cocok dengan nama proses induk dari sebelumnya. Untuk membunuh proses induk, gunakan opsi SIGKill dengan perintah kill sebagai berikut:

 Bunuh -Sigkill 7636 

Tergantung pada pemilik proses induk, Anda mungkin juga perlu menggunakannya Sudo .

Zombies tidak menakutkan ...

... kecuali mereka berada di gerombolan besar-besaran. Beberapa tidak perlu khawatir dan reboot sederhana akan menghapusnya.

Namun, jika Anda melihat bahwa aplikasi atau proses selalu memunculkan zombie, itu adalah sesuatu yang harus Anda perhatikan. Kemungkinan besar hanya program tertulis yang ceroboh, dalam hal ini, mungkin ada versi yang diperbarui yang dibersihkan dengan benar setelah proses anaknya.


Linux - Artikel Terpopuler

Bagaimana Proses sebuah file baris demi baris dalam Linux Bash Script

Linux Feb 3, 2025

Fatmawati Achmad Zaenuri / Shutterstock Cukup mudah untuk membaca isi garis file teks Linux demi baris dalam skrip shell - selama Anda berurusan dengan beber..


Apa yang Baru di Ubuntu 21.04 'Hirsute Hippo'

Linux Apr 22, 2025

Rilis baru Ubuntu 21.04. , Hirsute Hippo, dirilis pada 22 April 2021. Ini adalah rilis sementara distribusi Linux yang populer, dengan hanya sembilan bulan dukungan dari Canon..


Cara Sembunyikan Semua Desktop Ikon pada Mac

Linux Jun 23, 2025

Krisda / Shutterstock. Apakah desktop Mac Anda berantakan? Tidak benar-benar ingin mengatur semuanya? Jangan khawatir, Anda dapat menggunakan perintah terminal..


Cara Gunakan strace untuk Sistem Monitor Linux Panggilan

Linux Jun 23, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com Program Linux Tanyakan inti untuk melakukan beberapa hal untuk mereka. NS Strace. Perintah ..


Cara Menggunakan fsck Command pada Linux

Linux Aug 18, 2025

Pixza Studio / Shutterstock Semua data penting kami berada dalam sistem file satu jenis atau yang lain, dan masalah sistem file pasti akan terjadi. Di Linux, k..


Cara memutar kembali kernel di Linux

Linux Sep 30, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com Jika PC Linux Anda tiba-tiba memiliki masalah setelah pembaruan ke sistem Anda, itu mungkin a Linux kernel...


KDE Connect akhirnya datang ke iPhone

Linux Oct 26, 2025

KDE. Jika Anda mencari cara mudah untuk membuat iPhone Anda bermain bagus dengan Anda KDE Desktop. , hari ini adalah hari keberuntunganmu, sebagai KDE Co..


Cara Perbarui Fedora Linux

Linux Nov 10, 2024

Jadi, Anda akhirnya mengunduh dan menginstal Fedora Linux, tetapi sekarang Anda mungkin bertanya-tanya, bagaimana Anda tetap mendapatkan sistem Anda? Untungnya, Fedora memberi Anda beberap..


Kategori