Apa itu proses zombie dan bagaimana saya membunuhnya?

Jawaban:

17

Ya Tuhan! Tidak tidak Tidak. Jangan gunakan kill -9.

Itu tidak memberi proses kesempatan untuk bersih:

  1. matikan koneksi soket

  2. membersihkan file temp

  3. beri tahu anak-anaknya bahwa ia akan pergi

  4. atur ulang karakteristik terminalnya dan seterusnya dan seterusnya dan seterusnya.

Umumnya, kirim 15, dan tunggu satu atau dua detik, dan jika itu tidak berhasil, kirim 2, dan jika itu tidak berhasil, kirim 1. Jika tidak, HAPUS BINARY karena programnya berperilaku buruk!

Jangan gunakan kill -9. Jangan mengeluarkan pemanen gabungan hanya untuk merapikan pot bunga.

Severe_admin
sumber
13
kill -9 tidak akan membunuh zombie. Anda harus membunuh orang tua mereka, lihat pstree.
LapTop006
3
@ LapTop006: Kalau begitu mereka lebih seperti vampir; bunuh vampir kepala untuk menghentikan invasi.
amphetamachine
2
Jawaban ini salah dalam segala hal. Prosesnya selesai; itu sudah mematikan koneksinya, membersihkan file temp, dll. Tidak ada proses yang sebenarnya lagi, hanya sebuah entri dalam tabel proses. Jangan lepaskan biner anak - ini tidak berperilaku buruk. Itu hanya berarti bahwa orang tua belum mengadakan pemakaman yang tepat untuk anaknya.
Ken Williams
19

Proses zombie (sebenarnya sekarang mereka disebut <defunct>) sebenarnya bukan proses. Itu hanya masuk dalam tabel proses, sehingga proses induk dapat melakukan wait()syscall .

Anda tidak perlu khawatir tentang mereka. Mereka tidak menempati sumber daya apa pun, mereka akan menghilang baik ketika orang tua mereka memanggil wait()ketika orang tua itu sendiri mati.

vartec
sumber
9

Namun, sudah ada jawaban yang diterima: Anda BISA membunuh proses zombie. Lampirkan dengan debugger ke proses induk dan panggil fungsi waitpid. Misalnya: - mari kita asumsikan bahwa orang tua memiliki PID = 100, proses zombie memiliki PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
ondra
sumber
Menarik. Saya akan coba ini.
ewwhite
8

Proses zombie tidak memiliki sumber daya yang dialokasikan untuk itu apa pun, selain entri di pohon proses. Ini terjadi ketika suatu proses selesai, namun proses induk belum memetiknya , (yaitu, waited di atasnya).

Anda dapat mencoba dan memaksa orang tua untuk melakukan ini jika Anda mau dengan mengirimkannya SIGCHLD ( kill -20), kepada orang tua, tetapi tidak ada jaminan bahwa orang tua akan menghormatinya.

Anda akan sering melihatnya dalam waktu yang singkat (misalnya saat melihat pohon proses menggunakan atas) - ini normal; Dalam irisan waktu antara waktu proses anak selesai, dan jajak pendapat orang tua untuk itu - proses anak akan muncul sebagai zombie.

Jika Anda melihat proses zombie yang terus ada - yang tidak normal - masih tidak perlu khawatir - lagi karena tidak ada sumber daya yang dialokasikan untuk proses mati - umumnya berarti bahwa aplikasi ini ditulis dengan buruk oleh pengembang jelek.

Satu-satunya waktu Anda harus khawatir dari proses zombie, adalah ketika Anda melihat banyak dan banyak dari mereka, misalnya jika aplikasi jelek yang sama yang disebutkan di atas ditempatkan di bawah beban.

Kami memiliki banyak pengembang yang buruk di tempat saya bekerja, dan jadi saya memiliki hak istimewa untuk menangani masalah seperti itu dan mempelajari segala macam hal yang tidak berguna saat melakukannya. Bahkan - tim saya sering menggunakan skrip shell jelek yang ditulis oleh pengembang jelek dalam wawancara - jika kandidat dapat memilih bahwa skrip tersebut memang jelek, dan memberi tahu kami mengapa skrip itu jelek, ia memiliki kaki yang bagus di pintu.

Xerxes
sumber
0

Adapun senapan virtual ...

$ shoot <pid>
#! / bin / sh
korban = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' `
korban \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {korban} \ b" | kepala -n 1 | awk '{print $ 2}' `
#kill $ {korban}
echo "Membunuh $ {korban_name}."

Dan ingat: selalu tembak mereka di kepala.

drybjed
sumber
Maaf, tetapi sebagai catatan, skrip ini memiliki kesalahan ketik "nama korban" dan akan membunuh induk PID yang diberikan $ 1, dalam kasus apa pun mempertimbangkan apakah PID adalah satu-satunya zombie atau jika ia memiliki beberapa saudara kandung, itu hanya membunuh ayah dan dengan itu semua keluarga akan binasa.
Marc Riera
-1

Proses zombie adalah proses yang telah selesai dieksekusi, tetapi masih tercantum dalam tabel proses.

kill -9 [parent process_name] akan meletakkannya, dengan prasangka ekstrem.

Alan
sumber
kill -9 tidak akan membunuh proses zombie - itulah salah satu alasan mereka disebut zombie. "Proses" zombie tidak akan hilang sampai kode kembalinya dipetik oleh proses induk.
Mei
3
Tidak, bunuh -9 di THE PARENT akan membunuh orang tua, membuat init orang tuanya, yang AKAN menuai kode pengembalian anak.
Alan