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:~$
Comment trouver ce processus zombie?
ps auxwww | grep 'Z'
commande aurait dû montrer un processus dans unZ
état. Le dicton "informations système"=> There is 1 zombie process.
semble être un bug. Soit ça, soit il manque des informations dans la question.Réponses:
Pour tuer un zombie (processus), vous devez tuer son processus parent (comme de vrais zombies!), Mais la question était de savoir comment le trouver.
Trouvez le zombie (La question a répondu à cette partie):
Vous obtenez des zombies et tout ce qui contient un Z, vous obtiendrez donc le grep:
Trouvez le parent du zombie:
Te donnera:
Dans ce cas, vous ne voulez pas tuer ce processus parent et vous devriez être assez satisfait d'un zombie, mais tuer le processus parent immédiat 5145 devrait s'en débarrasser.
Ressources supplémentaires sur askubuntu:
la source
ps wauxf
fait la même choseMême si cette question est ancienne, je pensais que tout le monde méritait une réponse plus fiable:
Cela émettra deux colonnes délimitées par des espaces, la première étant un PID et la seconde son état.
Je ne pense pas que même GNU
ps
fournisse un moyen de filtrer directement par État, mais vous pouvez le faire de manière fiable avecawk
Vous avez maintenant une liste de PID qui sont des zombies. Comme vous connaissez l'état, il n'est plus nécessaire de l'afficher, vous pouvez donc filtrer ce dernier.
Donner une liste délimitée par une nouvelle ligne de PID zombies.
Vous pouvez maintenant utiliser cette liste avec une simple boucle shell
ps
est un outil puissant et vous n'avez rien à faire de compliqué pour en extraire des informations de processus.(Signification des différents états de processus ici - https://unix.stackexchange.com/a/18477/121634 )
la source
awk
est également un outil puissant qui ne divise pas le texte mais peut également correspondre. +1 ... les autres sont utilisésgrep
là où c'est inutile et imprécis.ps -p "$pid" -opid=,ppid=
ppid=
à la liste des options, donc pas besoin d'utiliser une commande distincte pour obtenir ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
De: http://www.cyberciti.biz/tips/killing-zombie-process.html
Parmi les commentaires améliorés:
Attention cependant: celui-ci tue également le processus.
la source
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
plutôt).Moins, c'est plus si:
C’est comme, donnez-moi une forêt (arborescence) de tous les processus des utilisateurs dans un format orienté utilisateur avec une largeur illimitée sur n’importe quel tty et montrez-la-moi sur un demi-écran au-dessus où cela correspond au cas où la huitième colonne contient un Z, et pourquoi ne pas souligner toute la ligne.
Format orienté utilisateur semble vouloir dire:
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
ainsi le statut de Zombie apparaîtra dans la 8ème colonne.Vous pouvez ajouter un
N
avant lep
si vous voulez des numéros de ligne et unJ
si vous voulez un astérisque lors du match. Malheureusement, si vous utilisezG
pour ne pas mettre en surbrillance la ligne que l'astérisque ne s'affichera pas,J
créez un espace pour elle.Vous finissez par avoir quelque chose qui ressemble à:
Vous pouvez suivre ceci (et il détectera si votre terminal aime -U Unicode ou -A Ascii):
OU juste, vous savez, utilisez la flèche vers le haut
less
pour suivre cet arbre / cette forêt à travers la hiérarchie; c'est ce que je recommandais avec l'approche "Moins, c'est plus".la source
Je vous suggère cette commande:
la source
aux
et assembler des chaînes est inutilement peu fiable lorsque vous pouvez utiliser-o
et demander exactement ce que vous voulez. Utilisez à laps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
place.Pour lister les zombies de processus, essayez cette commande:
Vous devrez peut-être changer en
$7
fonction de votre système d'exploitation.Cela renverra également la liste de leurs identifiants de processus parents (
PPID
).Pour essayer de tuer les zombies (après avoir testé la commande ci-dessus), essayez:
Pour identifier leurs parents, essayez avec
pstree
, comme:la source
j
Il est inutilement compliqué de supprimer une colonne du format. Utilisez-o
pour sélectionner ce que vous voulez à la place.ps j
n'imprime pas tous les processus du système. Il ne répertorie que les procs de l'utilisateur actuel (dans le style des travaux BSD), de sorte qu'il peut manquer des processus zombies.