Il y a 5 processus qui ne peuvent pas être tués kill -9 $PID
et l'exécution cat /proc/$PID/cmdline
suspendra la session en cours. Ce sont peut-être des processus zombies.
L'exécution ps -ef or htop
suspendra également la session en cours. Mais top
et ps -e
fonctionnent bien.
Il semble donc que le système de fichiers ne réponde pas à deux problèmes.
Il s'agit d'une machine de production exécutant des machines virtuelles, donc le redémarrage n'est pas une option.
Les identifiants de processus suivants ne fonctionnent pas: 16181 16765 5985 7427 7547
Le parent de ces processus est init
├─collectd(16765)─┬─{collectd}(16776)
│ ├─{collectd}(16777)
│ ├─{collectd}(16778)
│ ├─{collectd}(16779)
│ ├─{collectd}(16780)
│ └─{collectd}(16781)
├─collectd(28642)───{collectd}(28650)
├─collectd(29868)─┬─{collectd}(29873)
│ ├─{collectd}(29874)
│ ├─{collectd}(29875)
│ └─{collectd}(29876)
Et l'un des processus qemu ne fonctionne pas
|-qemu-system-x86(16181)-+-{qemu-system-x86}(16232)
| |-{qemu-system-x86}(16238)
| |-{qemu-system-x86}(16803)
| |-{qemu-system-x86}(17990)
| |-{qemu-system-x86}(17991)
| |-{qemu-system-x86}(17992)
| |-{qemu-system-x86}(18062)
| |-{qemu-system-x86}(18066)
| |-{qemu-system-x86}(18072)
| |-{qemu-system-x86}(18073)
| |-{qemu-system-x86}(18074)
| |-{qemu-system-x86}(18078)
| |-{qemu-system-x86}(18079)
| |-{qemu-system-x86}(18086)
| |-{qemu-system-x86}(18088)
| |-{qemu-system-x86}(18092)
| |-{qemu-system-x86}(18107)
| |-{qemu-system-x86}(18108)
| |-{qemu-system-x86}(18111)
| |-{qemu-system-x86}(18113)
| |-{qemu-system-x86}(18114)
| |-{qemu-system-x86}(18119)
| |-{qemu-system-x86}(23147)
| `-{qemu-system-x86}(27051)
linux
process
kill
zombie-process
Sam Stoelinga
la source
la source
/usr/bin/strace ps -ef
pour voir exactement où votreps -ef
accroche.ps -el
et dans quel état se trouvent ces processus?Réponses:
Vous n'avez pas de zombies.
cat /proc/$PID/cmdline
n'aurait aucun problème avec un zombie. Sikill -9
ne tue pas le programme , cela signifie que le programme effectue une opération d'E / S ininterrompue. Cela indique généralement l'une des trois choses:Des utilitaires tels que
ps
peuvent se bloquer s'ils essaient de lire certaines informations telles que le chemin exécutable du processus que le noyau ne fournit pas pour l'une des raisons ci-dessus.Essayez
cat /proc/16181/syscall
de voir ce que fait le processus 16181. Cela peut ou non fonctionner selon la distance de votre système.Si le problème est un système de fichiers réseau, vous pourrez peut-être le démonter de force ou le mettre en ligne. Si le problème est un bug du noyau ou du matériel, ce que vous pouvez faire dépendra de la nature du bug. Le redémarrage (et la mise à niveau vers un noyau fixe, ou le remplacement du matériel cassé) est fortement recommandé.
la source
Les autres réponses supposent qu'il s'agit de processus zombies. Un processus zombie est un processus qui a fini de s'exécuter, mais qui est toujours dans la table de processus au cas où le parent voudrait connaître l'état de sortie. Celles-ci sont normales et
init
nettoieront automatiquement les processus zombies qui leur sont assignés.Les processus zombies ne devraient jamais provoquer de blocage, il semble donc que cela ne soit pas votre problème. S'il s'agit d'un appel système ou d'un pilote bloqué, le processus peut être dans un état ininterrompu. Il y a une bonne explication ici .
la source
fork
de réussir (lorsque difficilenrpoc
est atteint) car ils occupent toujours de l'espace dans la table de processus.Pour trouver des processus zombies sur Linux:
Tout d'abord, vous pouvez essayer d'envoyer un signal SIGCHLD au processus parent du zombie en utilisant la commande kill. Notez que la commande ci-dessus vous donne le PPID (PID du processus parent) de chaque zombie. Dans notre exemple, le PPID du zombie est
555
.Si un processus zombie ne disparaît toujours pas, vous pouvez tuer le processus parent (par exemple, 555) du zombie.
Une fois son processus parent tué, le zombie sera adopté par le processus init, qui est le parent de tous les processus sous Linux. Le processus init appelle périodiquement
wait()
pour récolter tout processus zombie.la source
Vous ne pouvez tuer un zombie qu'en tuant son parent. Un processus zombie a libéré toutes ses ressources et attend que son statut de sortie soit récupéré par son parent. Il devient un zombie lorsque le parent n'exécute pas un
wait
pour récupérer le statut de sortie de son enfant. Lorsque vous tuez le parent du zombie,init
récupère le statut de sortie et le zombie meurt finalement.la source
init
. Si un zombie est réparé sousinit
, vous ne pouvez pas le tuer.