pengembangan-web-mp-pd.com

Apa itu proses zombie dan bagaimana cara membunuhnya?

Senapan Virtual?

38
jldugger

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 itu akan hilang

  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.

17
Severe_admin

proses zombie (sebenarnya sekarang mereka disebut <defunct>) Sebenarnya bukan proses. Ini hanya entri 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() aktif ketika orang tua itu sendiri mati.

20
vartec

Namun, sudah ada jawaban yang diterima: Anda BISA membunuh proses zombie. Lampirkan dengan debugger ke proses induk dan panggil fungsi waitpid. E. g .: - 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
11
ondra

Ini adalah proses yang telah sepenuhnya dialokasikan tetapi masih ada dalam tabel proses. Bandingkan ini dengan proses Orphan, yang orang tuanya telah meninggal tetapi masih mengeksekusi.

Inilahbeberapasaran untuk menyingkirkannya.

10
nedm

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 induknya belum menuai itu, (mis., 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 singkat (misalnya saat melihat pohon proses menggunakan atas) - ini normal; Dalam irisan waktu antara waktu yang proses anak selesai, dan orang tua memilihnya - 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 - itu 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 itu memang jelek, dan memberi tahu kami mengapa skrip itu jelek, ia memiliki kaki yang bagus di pintu.

8
Xerxes

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.

0
drybjed