System information as of Fri Mar 9 19:40:01 KST 2012
System load: 0.59 Processes: 167
Usage of /home: 23.0% of 11.00GB Users logged in: 1
Swap usage: 0% IP address for eth1: 192.168.0.1
=> There is 1 zombie process.
Graph this data and manage this system at https://landscape.canonical.com/
10 packages can be updated.
4 updates are security updates.
Last login: Fri Mar 9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
usera 13572 0.0 0.0 7628 992 pts/2 S+ 19:40 0:00 grep --color=auto Z
a@SERVER:~$
Bagaimana menemukan proses zombie itu?
ps auxwww | grep 'Z'
perintah seharusnya menunjukkan proses dalamZ
keadaan. Pepatah "informasi sistem"=> There is 1 zombie process.
tampaknya merupakan bug. Entah itu, atau ada informasi yang hilang dalam pertanyaan.Jawaban:
Untuk membunuh zombie (proses) Anda harus membunuh proses induknya (sama seperti zombie asli!), Tetapi pertanyaannya adalah bagaimana menemukannya.
Temukan zombie (Pertanyaan menjawab bagian ini):
Yang Anda dapatkan adalah Zombies dan yang lainnya dengan Z di dalamnya, jadi Anda juga akan mendapatkan grep:
Temukan orang tua zombie:
Akan memberimu:
Dalam hal ini Anda tidak ingin membunuh proses induk itu dan Anda seharusnya cukup senang dengan satu zombie, tetapi membunuh proses induk langsung 5145 harus menyingkirkannya.
Sumber daya tambahan di askubuntu:
sumber
ps wauxf
lakukan hal yang samaMeskipun pertanyaan ini sudah tua, saya pikir semua orang pantas mendapat jawaban yang lebih andal:
Ini akan memancarkan dua kolom dibatasi-spasi, yang pertama adalah PID dan yang kedua adalah negara.
Saya tidak berpikir bahkan GNU
ps
menyediakan cara untuk memfilter menurut negara secara langsung, tetapi Anda dapat melakukannya dengan andalawk
Anda sekarang memiliki daftar PID yang merupakan zombie. Karena Anda tahu statusnya, tidak perlu lagi menampilkannya, sehingga dapat disaring.
Memberikan daftar PID zombie yang dibatasi-baris baru.
Anda sekarang dapat beroperasi pada daftar ini dengan loop shell sederhana
ps
adalah alat yang ampuh dan Anda tidak perlu melakukan sesuatu yang rumit untuk mendapatkan informasi proses dari itu.(Arti dari berbagai proses di sini - https://unix.stackexchange.com/a/18477/121634 )
sumber
awk
juga merupakan alat yang ampuh yang tidak hanya membagi teks tetapi juga dapat mencocokkannya. +1 ... yang lain digunakan digrep
tempat yang tidak perlu dan tidak tepat.ps -p "$pid" -opid=,ppid=
ppid=
ke daftar opsi, jadi tidak perlu menggunakan perintah terpisah untuk mendapatkan ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
Dari: http://www.cyberciti.biz/tips/killing-zombie-process.html
Dari komentar yang lebih baik:
Hati-hati: yang ini juga membunuh prosesnya.
sumber
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
saja).Kurang lebih lebih:
Itu seperti, beri saya hutan (pohon) dari semua proses pengguna dalam format yang berorientasi pengguna dengan lebar tak terbatas pada setiap tty dan tunjukkan kepada saya di setengah layar di atas di mana itu cocok dengan kasus bahwa kolom ke-8 berisi Z, dan mengapa tidak menyorot seluruh baris.
Format berorientasi pengguna tampaknya berarti:
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
sehingga status Zombie akan muncul di kolom ke-8.Anda dapat memasukkan tanda
N
sebelump
jika Anda ingin nomor baris, danJ
jika Anda ingin tanda bintang di pertandingan. Sayangnya jika Anda menggunakanG
untuk tidak menyorot garis yang tidak akan ditampilkan asterisk, meskipunJ
menciptakan ruang untuk itu.Anda akhirnya mendapatkan sesuatu yang terlihat seperti:
Anda dapat menindaklanjuti ini dengan (dan itu akan mendeteksi jika terminal Anda suka -U Unicode atau -A Ascii):
ATAU hanya, Anda tahu, gunakan panah atas
less
untuk mengikuti pohon / hutan itu melalui hierarki; itulah yang saya rekomendasikan dengan pendekatan "Less is more".sumber
Saya menyarankan Anda perintah ini:
sumber
aux
dan mengeluarkan string dari itu tidak dapat diandalkan ketika Anda dapat menggunakan-o
dan meminta apa yang Anda inginkan. Gunakanps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
sebagai gantinya.Untuk membuat daftar zombie proses, coba perintah ini:
Anda mungkin perlu berubah
$7
tergantung pada sistem operasi Anda.Ini juga akan mengembalikan daftar id proses induknya (
PPID
).Untuk mencoba membunuh zombie (setelah menguji perintah di atas), coba:
Untuk mengidentifikasi orang tua mereka, cobalah dengan
pstree
, seperti:sumber
j
format untuk ini tidak perlu rumit. Gunakan-o
untuk memilih apa yang Anda inginkan.ps j
tidak mencetak semua proses dalam sistem. Itu hanya mencantumkan procs pengguna saat ini (dalam gaya pekerjaan BSD) sehingga dapat melewatkan proses zombie.