J'ai essayé de tuer tous mes emplois d'arrière-plan soumis plus tôt sous KUbuntu par
kill -9 $(jobs -p)
Bien que cette commande ait immédiatement donné le message comme
[1] Tué myjob1
[2] Tué myjob2
Je peux toujours voir leurs processus suspendus dans la sortie de top et les utilisations du processeur et de la mémoire ne sont pas modifiées dans la sortie de disponibilité et libre.
Je suppose donc que je ne dois pas les avoir tués correctement. Quelqu'un peut-il expliquer ce qui m'arrive et que dois-je faire?
J'ai trouvé qu'en haut, si tapez k et saisissez le PID, je peux tuer les processus un par un. Alors, est-ce différent de la commande kill?
J'ai également trouvé quelque part en ligne http://www.ruhr.de/home/smallo/award.html pour ne pas recommander de tuer -9
Formulaire d'utilisation inutile de Kill -9
(Citation abomination)
Non non Non. N'utilisez pas kill -9.
Cela ne donne pas au processus une chance de proprement:
1) coupez les connexions des prises
2) nettoyer les fichiers temporaires
3) informer ses enfants qu'il s'en va
4) réinitialiser ses caractéristiques de terminal
et ainsi de suite et ainsi de suite et ainsi de suite.
En général, envoyez 15, et attendez une seconde ou deux, et si cela ne fonctionne pas, envoyez 2, et si cela ne fonctionne pas, envoyez 1. Si cela ne fonctionne pas, RETIREZ LE BINAIRE parce que le programme se comporte mal!
N'utilisez pas kill -9. Ne sortez pas la moissonneuse-batteuse juste pour ranger le pot de fleurs.
Est-ce vrai? Que signifie «envoyer 15», «envoyer 2» et «envoyer 1»? S'agit-il de commandes elles-mêmes ou "kill -15 PID", "kill -2 PID" et "kill -1 PID"?
Merci et salutations!
Réponses:
Votre processus est probablement mort mais il apparaît toujours dans l'entrée de la table de processus car il s'agit d'un "processus zombie". Lorsqu'un processus enfant s'est terminé et a complètement disparu (sauf son entrée dans la table de processus) et que le parent ne pouvait pas récupérer son état de terminaison (via l'une des fonctions d'attente), il est appelé zombie ... Tuer (via le signal) un zombie ne veut pas fonctionner car il est déjà terminé. Ce que vous devez faire est de découvrir son processus parent et de tuer thjat one cleany, donc de ne pas utiliser kill - 9
voici deux étapes simples pour tuer un zombie ...
la source
-f
indicateur de ps pour voir les processus parents.voir
man kill
pour une définition des différents signaux disponibles, mais oui.Celles-ci informent un processus que l'utilisateur en a terminé avec le processus, bien qu'elles indiquent des raisons quelque peu différentes. 'est en train de faire et de quitter ", SIGHUP signifie simplement que personne n'écoute plus (un processus serveur peut légitimement réagir à SIGHUP en interrompant la sortie de sa console et en continuant de s'exécuter).
la source
Cela signifie utiliser
kill -15 PID
(ou un autre nombre) au lieu dekill -9 PID
. Les nombres sont équivalents à différents signaux Unix .la source
Cela signifie taper "kill -1" ou "kill -15" au lieu de taper "kill -9". Kill -9 est une balle inconditionnelle dans la tête de tout processus en cours d'exécution, le tue mort dans un état sale qui peut provoquer des fuites de mémoire, bla bla.
Si vous tapez kill -9 et que cela ne fonctionne pas, je m'assurerais que le processus ne se reproduit pas et que vous avez la permission de tuer ce processus.
la source
Le signal 9 est SIGKILL. L'envoi d'un SIGKILL demande au système d'exploitation de tuer immédiatement le processus, sans poser de questions. Le processus n'est pas notifié à l'avance et n'a aucune chance de se nettoyer après lui-même.
Le signal 15 est SIGTERM. L'envoi d'un SIGTERM demande au système d'exploitation de demander au processus de s'arrêter.
SIGKILL peut être ignoré si le système d'exploitation pense que le processus fait des E / S, ou s'il s'agit d'un zombie (un processus enfant dont le parent n'a pas nettoyé après).
SIGTERM peut être ignoré par l'application, mais il n'est pas recommandé que les applications le fassent, car les systèmes d'exploitation envoient SIGTERM pendant l'arrêt, suivi brièvement par SIGKILL si un programme est toujours en cours d'exécution.
Remarque: La ligne de commande
kill
demande toujours au système d'exploitation d'envoyer un signal à l'application, ce qu'il peut faire ou non en fonction de qui est propriétaire du processus, etc.la source