Est-il possible de tuer un processus zombie sans redémarrer? Voici comment ça s'est passé:
Je veux télécharger un fichier de 12 Go en utilisant torrent. Après avoir ajouté le fichier .torrent, la transmission s’est transformée en un processus zombie (j’ai aussi essayé ktorrent. Même comportement). Enfin, je pourrais télécharger le fichier en utilisant µTorrent mais après avoir fermé le programme, il se transforme également en zombie.
J'ai essayé d' utiliser kill
, skill
et pkill
avec différentes options et le -9
signal , mais sans succès.
Après avoir lu certaines solutions sur le Web, j'ai découvert que tuer le parent peut tuer le zombie. Mais tuer le vin n'a pas aidé non plus.
Y a-t-il un autre moyen?
Modifier:
ps -o pid, ppid, stat, comm
PID PPID STAT COMMAND
7121 2692 Ss bash
7317 7121 R+ ps
pstree sortie:
init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
├─NetworkManager─┬─dhclient
│ └─{NetworkManager}
├─acpid
├─amarok───19*[{amarok}]
├─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─2*[dbus-launch]
├─desktopcouch-se───desktopcouch-se
├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
│ └─14*[{firefox-bin}]
├─gconfd-2
├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
│ │ │ │ ├─compiz───sh───gtk-window-deco
│ │ │ │ ├─fusion-icon
│ │ │ │ ├─gdu-notificatio
│ │ │ │ ├─gnome-panel───{gnome-panel}
│ │ │ │ ├─gnome-power-man
│ │ │ │ ├─gpg-agent
│ │ │ │ ├─gwibber-service
│ │ │ │ ├─nautilus
│ │ │ │ ├─nm-applet
│ │ │ │ ├─polkit-gnome-au
│ │ │ │ ├─2*[python]
│ │ │ │ ├─qstardict───{qstardict}
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-applet
│ │ │ │ ├─trackerd
│ │ │ │ ├─wakoopa─┬─wakoopa
│ │ │ │ │ └─3*[{wakoopa}]
│ │ │ │ └─{gnome-session}
│ │ │ └─{gdm-session-wo}
│ │ └─{gdm-simple-sla}
│ └─{gdm-binary}
├─6*[getty]
├─gnome-keyring-d───2*[{gnome-keyring-}]
├─gnome-screensav
├─gnome-settings-
├─gnome-system-mo
├─gnome-terminal─┬─bash───ssh
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ └─{gnome-terminal}
├─gvfs-afc-volume───{gvfs-afc-volum}
├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
├─gvfs-gdu-volume
├─gvfsd
├─gvfsd-burn
├─gvfsd-computer
├─gvfsd-metadata
├─gvfsd-trash
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ ├─hald-addon-cpuf
│ │ ├─hald-addon-inpu
│ │ └─hald-addon-stor
│ └─{hald}
├─indicator-apple
├─indicator-me-se
├─indicator-sessi
├─irqbalance
├─kded4
├─kdeinit4─┬─kio_http_cache_
│ └─klauncher
├─kglobalaccel
├─modem-manager
├─multiload-apple
├─mysqld───10*[{mysqld}]
├─named───10*[{named}]
├─nmbd
├─notification-ar
├─notify-osd
├─polkitd
├─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smbd───smbd
├─snmpd
├─sshd
├─timidity
├─trashapplet
├─udevd───2*[udevd]
├─udisks-daemon─┬─udisks-daemon
│ └─{udisks-daemon}
├─upowerd
├─upstart-udev-br
├─utorrent.exe───{utorrent.exe}
├─vnstatd
├─winbindd───2*[winbindd]
├─wnck-applet
├─wpa_supplicant
└─xinetd
Le moniteur système et le haut indiquent que le processus zombie utilise des ressources:
Edit 2: Je pense avoir trouvé quelque chose. J'ai essayé de me déconnecter et j'ai vu ce message:
Etant donné que d'autres clients torrent ont le même problème, c'est peut-être quelque chose qui concerne la taille du fichier. J'utilise Ubuntu 10.04 sur des partitions ext4. Tuer Nautilus et envoyer un signal à SIGCHLD ne fonctionnait pas.
ps -o pid,ppid,stat,comm
etpstree
à votre question?Réponses:
Je ne pense pas que le processus de zombie cause beaucoup de maux de tête. Un processus zombie ne prend aucune ressource. C'est juste qu'il a son entrée dans la table de processus.
Un processus Zombie n'est pas un processus orphelin, il a un parent.
kill
,skill
pkill
ne fonctionnera pas puisque le processus est déjà tué, mais que son entrée n’a pas été supprimée.Le processus zombie peut être tué en envoyant un
SIGCHLD
signal au parent. Je pense que le numéro de signalSIGCHLD
est17
ou18
Si cela échoue également, vous voudrez peut-être tuer le parent lui-même.
De Wikipedia sur le signal SIGCHLD:
EDIT 1 : Les ressources système utilisées sont principalement l’entrée de la table de processus. Si quelqu'un sait s'il consomme plus que cela - cycle de la mémoire ou du processeur, veuillez ajouter une explication. D’après nos connaissances, cela ne prend pratiquement pas de ressources système significatives.
EDIT 2: Citant sur Wikipedia
Ainsi, l'entrée est conservée de sorte que le processus parent puisse connaître l'état de sortie car, au moment où l'enfant quitte, le parent n'est probablement pas dans un état ou n'est pas prêt à lire son état de sortie.
EDIT 3
Jusqu'à ce jour, je n'ai jamais expérimenté de processus zombie prenant 100% du processeur. Voyant cela pour la première fois.
Essayez de faire un
killall utorrent.exe
Je peux voir qu'il y a deux instances
utorrent.exe
et l'une d'elles est zombie. Probablement le deuxième (enfant). killall devrait tuer le parent puisque l'enfant (zombie) ne peut pas être tué.EDIT 4
On dirait que le killall n'a pas fonctionné puisqu'il donnait le signal TERM au lieu de KILL.
Essaie
killall --signal=KILL utorrent.exe
Si cela ne fonctionne pas, essayez de tuer le processus de manière sélective.
Obtenir la liste des PID de processus utorrent.exe
Vous devriez avoir deux processus comme
Donc, le second est le parent. Tuez-le en utilisant
EDIT 5
Essayez de trouver l'ID parent du processus à l'aide de cette commande bash
dans ton cas c'est
Si la sortie vient comme
Malheureusement, je pense que vous n’avez pas de chance. L'ID de processus
1
appartient à init sans lequel votre système ne peut pas s'exécuterla source
A zombie process does not take up any resources
et citéthe child is still consuming system resources ... it is known as a zombie process
.top -H
pour afficher les threads au lieu des processus en haut.L'utilisation
kill
du processus lui-même est en effet inefficace, car le processus est déjà mort;kill
apporte un processus en direct à l'état de zombie.Le processus parent est chargé de récupérer le code de sortie du processus; le processus reste un zombie jusqu'à ce que cela soit fait. Le
init
processus récupérera le code de sortie de tout processus et le jettera. C'est donc le parent "de dernier recours" qui nettoiera tout zombie qui est un descendant direct.Tuer le parent du processus zombie est généralement efficace car le processus zombie redevient
init
son parent dès que le processus parent est terminé (c’est-à-dire que tuer le parent a transformé ce processus en zombie et que le grand-parent a lu le code de sortie du parent. , donc le parent est vraiment parti). Un zombie peut être le parent d'un zombie. Il ne suffit donc pas de tuer le parent, il doit également être collecté par un autre processus.Notez que les processus ne sont jamais responsables du nettoyage de leurs petits-enfants - ils reviennent toujours au processus 1 en tant que parent (c’est pourquoi les auteurs de démons utilisent parfois un double fork () et terminent le processus au milieu pour dissocier complètement le processus enfant du processus invoquant. coquille)
Tuer
wine
n'est probablement pas efficace parce que ce n'est pas vraiment le processus parent du processus zombie; le "utorrent.exe" qui est un descendant direct de init est plutôt. Ce processus, toutefois, continue de fonctionner normalement, négligeant simplement ses tâches.la source
ps waux
répertorié dans laPPID
colonne du zombie.Manière beaucoup plus facile que killall, -9, etc:
1) Utilisez qBitorrent à la place de la console uTorrent (j’attends également une version graphique et qBitorrent l’est vraiment).
2) Si vous utilisez la version 11.04 ou une version ultérieure, appuyez sur alt + f2 (ouvre une fenêtre de commandes spéciales), tapez xkill et votre souris est maintenant un x. Cliquez sur le programme que vous souhaitez fermer (UI = ID de processus) et il sera tué pour vous.
Conseil avancé: liez un raccourci clavier pour "xkill" comme sur mon clavier macro G15.
la source
Dans mon cas, lorsque le vin est suspendu et que je ne peux pas tuer l'enfant Zombie avec un fusil de chasse, je le ferais:
wineserver -k
alors je tuerais le "Fils du Processus"killall -9 Oblivion.exe
(Par exemple)Pour ce que je comprends, wineserver envoie un signal à tous ses enfants zombies qu'ils vont tous mourir (à cause du fusil de chasse que vous connaissez), mais parfois, un enfant pense de lui-même et veut prendre le monde par la tempête. Je fais donc le supplément
killall -9
ou lekill -9
avec l'identifiant du processus.la source
kill -s SIGCHLD ppid
Je suppose que vous utilisez un disque SSD.
Lors de l'ajout de gros torrents à un client torrent, les fichiers "espaces réservés" du torrent que vous téléchargez sont créés sur le disque, mais sont vides jusqu'à ce qu'ils soient remplis progressivement au cours du processus de téléchargement.
Avec un disque dur normal, le disque constitue le goulot d'étranglement et vous ne remarquerez aucun problème de performances avec le reste de votre bureau.
Cependant, lors de l'utilisation d'un disque SSD, le processeur est le goulot d'étranglement et l'application semble s'être bloquée (passe en gris). Si vous le laissez pendant un moment, il se remettra et tout ira bien. Cela a été mon expérience depuis le passage à un SSD.
En ce qui concerne les processus de mise à mort, d’autres ont donné de meilleurs conseils que moi. L’utilisation du signal KILL donne généralement satisfaction, mais j’ai eu l’intrépide solution qui a nécessité un redémarrage au fil des ans.
la source