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?
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 .
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)
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.