web-dev-qa-db-fra.com

Équivalent de ctrl c dans la commande pour annuler un programme

J'exécute un long programme Linux 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 fermera 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 pour l'instant je ne suis pas dans la machine qui exécute la session, donc je ne peux pas faire ctrl c.

Ma question est: existe-t-il un moyen de faire à distance l'équivalent de ctrl c?.

66
Eduardo

Essayer:

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.

97
Firas Assaad

ctrl c envoie juste un signal SIGINT, mais il y a d'autres signaux 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)

7
Johan

Si vous contrôlez le processus distant de longue durée, vous pouvez installer un gestionnaire de signaux pour SIGTERM (voir man signal et man sigaction et les nombreuses SO questions sur ce sujet), pour bien nettoyer avant de mourir.

C'est une chose très courante à faire.

4
dmckee

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`
2
Michael Cole

Gardez également à l'esprit dans votre gestionnaire de signaux, que c'est comme un gestionnaire d'interruptions dans la mesure où vous êtes très limité quant à ce que vous êtes autorisé à faire dedans sans corrompre le reste de votre programme. La meilleure chose que vous puissiez faire ici est de définir une variable atomic_t "should_quit".

0
Ana Betts

Je fais comme ci-dessous

killall -2 <ProgramName>

ou

kill -2 <PID of your process>

J'avais l'habitude d'oublier le nom du signal. c'est-à-dire SIGINT/SIGKILL ici, donc j'utilise des nombres pour cela comme killall -2 ou killall -9

0
Jeegar Patel