web-dev-qa-db-fra.com

Quelle est la différence entre l'utilisation du Moniteur système et du Terminal pour tuer un processus?

Lorsque j'arrête mon minecraft, il ne se ferme jamais complètement, j'ai cherché une solution mais n'en ai trouvé aucune. Après un certain temps, j'ai abandonné et j'ai décidé de le tuer manuellement lorsque je voulais le fermer.

Si j'utilise pgrep puis tue dans le terminal, cela ne semble avoir aucun effet, mais lorsque j'ouvre le moniteur système et que je fais un clic droit et le tue, il s'arrête bien.

Quelles sont les différences entre la méthode System Monitor et la méthode Terminal? Le Moniteur système fait-il autre chose en arrière-plan que la commande kill ne fait pas?

4
giodamelio

Il n'y a pas de différence entre la commande kill et le 'kill' du Moniteur système. Le Moniteur système donne juste quelques arguments à kill que je suppose que vous ne connaissez pas.

Quand vous kill <process-number>, il envoie en fait un signal à ce processus pour quitter proprement. C'est ce qu'on appelle un SIGTERM. Afin de tuer un processus sans condition, pouvant entraîner une perte de données, vous devez envoyer un signal différent:

kill -9 <process-number>

Cela envoie un SIGKILL au processus, qui termine immédiatement son exécution. Le Moniteur système utilise kill -9 lorsque vous demandez de "tuer" un processus plutôt que de simplement le "fermer".

Cette réponse sur le SuperUser Stack Exchange devrait être utile .

5
Jjed

Lorsque vous tuez une application à l'aide du terminal, je suppose que vous avez exécuté:

kill 1234

Sur System Monitor, vous avez sélectionné le processus et choisi d'envoyer KILL au processus.

Par défaut, le signal envoyé au processus lors de l'utilisation de plain kill $pid est TERM. Cela permet aux applications de se terminer correctement. Cependant, lors de l'envoi de KILL, le programme disparaît immédiatement sans aucune chance de s'arrêter proprement (c'est-à-dire enregistrer des données). Pour envoyer un signal KILL depuis la ligne de commande, utilisez:

kill -KILL 1234

(l'autre moyen d'exécuter cette commande est kill -9 1234, c'est juste une question de préférence)

1
Lekensteyn

C'est parce que par défaut, votre kill pgrep envoie un SIGTERM (terminate). Si l'application n'est pas en bon état, un SIGTERM ne fonctionnera pas. Le "Kill Process" dans System Monitor envoie la commande SIGKILL qui le tuera littéralement. Ce sont deux signaux différents envoyés. Si vous voulez le faire avec pgrep, vous utiliseriez kill -9, L'option -9 Envoie le signal SIGKILL et sera alors exactement la même chose que ce que fait le "Kill Process" de System Monitor.

Pour info, le nom de la commande kill est un peu trompeur. man kill Dit:

kill - envoie un signal à un processus

Cela pourrait être n'importe quel signal. Pour voir une liste de tous les signaux, tapez man --sections=7 signal Et faites défiler vers le bas.

Puis dit:

Le signal par défaut pour kill est TERM.

Voir https://askubuntu.com/a/716814/11929 pour plus d'informations.

0
Elijah Lynn