Zombi süreci nasıl bulunur?

85
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
[email protected]:~$ 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
[email protected]:~$ 

Bu zombi sürecini nasıl bulabilirim?

    
sordu Pablo 09.03.2012 11:44

6 cevap

101

Bir zombi (süreci) öldürmek için ana sürecini (gerçek zombiler gibi) öldürmek zorundasınız, ama soru nasıl bulacağımızdı.

Zombi bul (Bu bölümü cevaplayan soru):

[email protected]:~$ ps aux | grep 'Z'

Elde ettiğin şey Zombiler ve içinde Z bulunan başka bir şey, yani grep'i de alacaksın:

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
usera      93572   0.0  0.0   0      0   ??       Z    19:40   0:00 something

Zombie'nin ebeveyni bulun:

[email protected]:~$ pstree -p -s 93572

Size verecek:

init(1)---cnid_metad(1311)---cnid_dbd(5145)

Bu durumda, bu ebeveyn işlemini öldürmek istemezsiniz ve bir zombi ile oldukça mutlu olmalısınız, ancak 5145'in acil ebeveyn sürecini öldürmeniz gerekir.

Askubuntu ile ilgili ek kaynaklar:

verilen cevap Duncanmoo 03.05.2013 10:39
26

Bu soru eski olmasına rağmen, herkesin daha güvenilir bir cevabı hak ettiğini düşündüm:

ps axo pid=,stat=

Bu, ilk olarak bir PID ve ikincisinin durumu olan iki boşlukla ayrılmış sütun yayar.

GNU% co_de yüzdesinin bile doğrudan duruma göre filtrelemeyi sağladığını düşünmüyorum, ancak bunu ps

ile güvenle yapabilirsiniz.
ps axo pid=,stat= | awk '~/^Z/ { print }'

Artık zombiler olan PID'lerin bir listesi. Durumu bildiğinizden, artık görüntülenmesi gerekmediğinden, filtrelenebilir.

ps axo pid=,stat= | awk '~/^Z/ { print  }'

Yeni bir sınırlandırılmış zombi PID listesi veriyor.

Artık bu listede basit bir kabuk döngüsü ile çalışabilirsiniz

for pid in $(ps axo pid=,stat= | awk '~/^Z/ { print  }') ; do
    echo "$pid" # do something interesting here
done

awk güçlü bir araçtır ve işlem bilgisini almak için karmaşık bir şey yapmanız gerekmez.

    
verilen cevap Sorpigal 25.01.2014 21:29
4

ps aux | awk '{ print " " }' | grep -w Z

Gönderen: İşte

Yorumlardan geliştirilmiş bir:

for p in $(ps jauxww | grep Z | grep -v PID | awk '{print }'); do
    for every in $(ps auxw | grep $p | grep cron | awk '{print }'); do
        kill -9 $every;
    done;
done;

Yine de dikkatli olun: Bu da süreçleri öldürür.

    
verilen cevap Rinzwind 09.03.2012 11:48
1

Daha az şey olsa daha:

ps afuwwx | less +u -p'^(\S+\s+){7}Z.*'

Aynı şekilde, tüm kullanıcı süreçlerinin bir ormanı (ağacı), herhangi bir tty üzerinde sınırsız genişliğe sahip kullanıcı odaklı bir formatta verin ve 8. sütunun içerdiği durumla eşleştiği yerdeki ekranın yarısında bana gösterin. Z, ve neden tüm çizgiyi vurgulamıyorsunuz?

Kullanıcı odaklı format şu anlama gelir: USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND , böylece Zombie durumu 8. sütunda görünecektir.

Satır numaralarını istiyorsanız N 'den p ' ye, maçta yıldız işareti istiyorsanız J 'e atabilirsiniz. Ne yazık ki, yıldız işareti göstermeyecek satırı vurgulamak için G kullanırsanız, J bunun için alan yaratır.

Görünüşe benzeyen bir şey elde ettiniz:

…
  root      2919  0.0  0.0  61432  5852 ?      Ss Jan24 0:00 /usr/sbin/sshd -D
  root     12984  0.0  0.1 154796 15708 ?      Ss 20:20 0:00  \_ sshd: lamblin [priv]
  lamblin  13084  0.0  0.0 154796  9764 ?      S  20:20 0:00      \_ sshd: [email protected]/0
* lamblin  13086  0.0  0.0  13080  5056 pts/0  Z  20:20 0:00          \_ -bash <defunct>
  lamblin  13085  0.0  0.0  13080  5056 pts/0  Ss 20:20 0:00          \_ -bash
  root     13159  0.0  0.0 111740  6276 pts/0  S  20:20 0:00              \_ su - nilbmal
  nilbmal  13161  0.2  0.0  13156  5004 pts/0  S  20:20 0:00                  \_ -su
  nilbmal  13271  0.0  0.0  28152  3332 pts/0  R+ 20:20 0:00                      \_ ps afuwwx
  nilbmal  13275  0.0  0.0   8404   848 pts/0  S+ 20:20 0:00                      \_ less +u -Jp^(\S+\s+){7}Z.*
…

Bunu yapabilirsin Bunu takip et (

pstree -psS <PID LIST>

VEYA, bildiğiniz gibi, hiyerarşiden o ağacı / ormanı takip etmek için less 'daki yukarı oku kullanın; "Daha az çoktur" yaklaşımıyla önerdiğim şey buydu.

    
verilen cevap dlamblin 14.02.2018 11:40
0

Size şu komutu öneririm:

ps aux | awk '"[Zz]" ~  { printf("%s, PID = %d\n", , ); }'
    
verilen cevap Peycho Dimitrov 04.05.2015 17:13
0

İşlem zombilerini listelemek için şu komutu deneyin:

ps j | awk ' ~ "Z"'

İşletim sisteminize bağlı olarak değerini değiştirmeniz gerekebilir.

Bu, ayrıca kendi ana işlem kimlikleri listesini de ( PPID ) döndürecektir.

Zombileri öldürmeyi denemek için (yukarıdaki komutu test ettikten sonra) şunu deneyin:

kill -9 $(ps j | awk 'NR>1 &&  ~ "Z" {print }')

Ebeveynlerini tanımlamak için, pstree ile deneyin, örneğin:

$ ps j | awk 'NR>1 &&  ~ "T" {print }' | xargs -L1 pstree -sg
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2430)
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2431)
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2432)
    
verilen cevap kenorb 19.02.2016 22:12

Etiketlerdeki diğer soruları oku