Équivalent de CTRL C in commande pour annuler un programme
J'exécute un programme long sur une machine distante, et je veux l'arrêter, mais mon problème est que si j'utilise la commande kill, le programme se terminera sans enregistrer les résultats. Normalement, ce que je fais pour terminer le programme utilise ctrl c et dans ce cas, le programme enregistre les résultats, mais en ce moment je ne suis pas dans la machine qui exécute la session, donc je ne peux pas faire ctrl C.
Ma question est: est-il possible de le faire à distance l'équivalent de ctrl-c?.
5 réponses
Essayez:
kill -SIGINT processPIDHere
Fondamentalement Ctrl C envoie le signal SIGINT
(interruption) tandis que kill envoie le signal SIGTERM
(terminaison) par défaut sauf si vous spécifiez le signal à envoyer.
Ctrl C envoie juste un signal SIGINT, mais il y a d'autres signaux qui sont un peu plus doux. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html
Je pense que vous pouvez utiliser la commande the kill pour envoyer un autre signal. (voir Man kill pour plus d'informations)
Si vous contrôlez le processus distant de longue durée, vous pouvez installer un gestionnaire de signal pour SIGTERM (voir man signal
et man sigaction
et les nombreuses questions SO sur ce sujet), pour nettoyer bien avant de mourir.
C'est une chose très courante à faire.
Voici un exemple pour mongod
Pour démarrer le démon à partir de la ligne de commande:
mongod &
Puis plus tard
kill -SIGINT `pgrep mongod`
Gardez à l'esprit aussi bien dans votre gestionnaire de signal, que c'est comme un gestionnaire d'interruption dans que vous êtes très limité à ce que vous êtes autorisé à faire sans endommager le reste de votre programme. La meilleure chose que vous pouvez faire ici est de définir une variable atomic_t "should_quit".