Quelle est la différence entre Ctrl + Z et Ctrl + C dans la ligne de commande Unix?

J'utilise le terminal Mac OS X. Et j'utilise Ctrl+Z ou Ctrl+C pour arrêter certains programmes. Mais je me suis rendu compte que je ne sais pas ce qu'ils font exactement. Quels sont-ils et quelle est la différence entre eux?

Cette question était une question super-utilisateur de la semaine .
Lisez l' entrée du blog du 13 mars 2011 pour plus de détails ou soumettez votre Question de la semaine.

Control + Z est utilisé pour suspendre un processus en lui envoyant le signal SIGSTOP , qui ne peut pas être intercepté par le programme. Alors que Control + C est utilisé pour tuer un processus avec le signal SIGINT , et peut être intercepté par un programme afin qu'il puisse se nettoyer avant de sortir ou ne pas sortir du tout.

Si vous suspendez un processus, cela apparaîtra dans le shell pour vous dire qu'il a été suspendu:

 [1]+ Stopped yes 

Cependant, si vous en tuez un, vous ne verrez aucune autre confirmation que d'être renvoyé à une invite de shell. Lorsque vous suspendez un processus, vous pouvez également faire des affaires de fantaisie avec lui. Par exemple, exécutez ceci:

 fg 

Avec un programme suspendu, le ramènera au premier plan.

Et exécuter la commande

 bg 

Avec un programme suspendu, il lui permettra de s'exécuter en arrière-plan (la sortie du programme va toujours au TTY, cependant).

Si vous voulez tuer un programme suspendu, vous ne devez pas le faire revenir avec fg abord, vous pouvez simplement faire la commande:

 kill %1 

Si vous avez plusieurs commandes suspendues, en cours d'exécution

 jobs 

Les énumérera comme suit:

 [1]- Stopped pianobar [2]+ Stopped yes 

En utilisant %# , où # est le numéro de travail (celui entre crochets de la sortie des jobs ) avec bg , fg ou kill , peut être utilisé pour effectuer l'action sur ce travail.

Ctrl + Z suspend le processus avec SIGTSTP, vous pouvez le reprendre plus tard. Ctrl + C tue le processus avec SIGINT, qui met fin au processus, à moins qu'il ne soit traité / ignoré par la cible, donc vous ne pouvez pas le reprendre. Il existe également un SIGSTOP qui peut être envoyé par kill() et que le processus ne peut pas intercepter. SIGCONT est la contrepartie de SIGSTOP et de SIGTSTP qui supprime le processus.

CTRL + Z arrête (arrête) un travail

CTRL + C met fin à un travail

Avec CTRL + C, vous ne pouvez pas reprendre le processus, mais avec CTRL + Z, le travail peut être repris en entrant simplement à la commande promt:

 fg %1 

Si vous avez plusieurs processus en pause, vous devriez faire

 jobs 

Pour afficher la sortie et sélectionner le numéro approprié pour reprendre par exemple

 fg %3 

Reprend le troisième travail dans la liste. Vous pouvez également créer des travaux en arrière-plan avec

 bg %n 

Où n est le numéro d'emploi.

 Cntrl + Z pause the currently running process. 

Et

 Cntrl + C simply terminates the running process. 

En utilisant Cntrl + C, vous ne pouvez pas reprendre le processus. Lorsque vous utilisez Cntrl + Z, vous pouvez reprendre le processus.

Utilisez fg% 1 pour reprendre le processus.

Les réponses précédentes sont correctes, mais pour une raison inconnue, Ctrl-Z suspend tous les processus enfants, mais killall -SIGSTOP … ne suspend que le processus le plus proche (parent) et laisse les enfants fonctionner comme ils le souhaitent.

CTRL + Z arrête (arrête) un travail

CTRL + C met fin à un travail

Avec CTRL + C, vous ne pouvez pas reprendre le processus, mais avec CTRL + Z, le travail peut être repris en entrant juste à l'invite de commande:

Fg% 1

Si vous avez plusieurs processus en pause, vous devriez faire

emplois

Pour voir la sortie.