web-dev-qa-db-fra.com

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

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

Cette question était un Question de la semaine du super utilisateur.
Lisez le 13 mars 2011 entrée de blog pour plus de détails ou soumettez les vôtres Question de la semaine.

183
Eonil

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

Si vous suspendez un processus, celui-ci apparaîtra dans le shell pour vous indiquer qu'il a été suspendu:

[1]+  Stopped                 yes

Cependant, si vous en tuez un, vous ne verrez aucune confirmation autre que celle d'être renvoyée à une invite du shell. Lorsque vous suspendez un processus, vous pouvez également en faire des choses fantaisistes. Par exemple, en exécutant ceci:

fg

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

Et exécuter la commande

bg

Si un programme est suspendu, il pourra s’exécuter en arrière-plan (la sortie du programme ira quand même vers le téléscripteur).

Si vous voulez tuer un programme suspendu, vous n'avez pas à le ramener d'abord avec fgname__, vous pouvez simplement exécuter la commande suivante:

kill %1

Si vous avez plusieurs commandes suspendues, exécutez

jobs

les listera, comme ceci:

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

Utiliser %#, où # est le numéro du travail (celui entre crochets de la sortie jobsname__) avec bgname__, fgou killname__, peut être utilisé pour effectuer l'action sur ce travail.

244
Wuffers

Ctrl + Z suspend le processus avec SIGTSTP, vous pourrez le reprendre plus tard. Ctrl + C supprime le processus avec SIGINT, qui le termine sauf s'il est géré/ignoré par la cible, vous ne pouvez donc 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 annule le processus.

22
Ben Voigt

CTRL + Z arrête (met en pause) un travail

CTRL + C met fin à un travail

avec CTRL + C, vous ne pouvez pas reprendre le processus, mais avec CTRL + Z, vous pouvez reprendre le travail en entrant simplement la commande suivante:

fg %1

si vous avez plusieurs processus en pause, alors vous devriez faire

jobs

pour voir le résultat et sélectionnez le numéro approprié à reprendre, par ex.

fg %3

reprend le troisième travail de la liste. Vous pouvez également exécuter des tâches en arrière-plan avec

bg %n

où n est le numéro de travail.

17
g24l
Cntrl + Z pause the currently running process. 

Et

Cntrl + C simply terminates the running process.

Avec Ctrl + C, vous ne pouvez pas reprendre le processus. où en utilisant Ctrl + Z vous pouvez reprendre le processus.

utilisez fg% 1 pour reprendre le processus.

3
Ravindra Miyani

CTRL+Z arrête (met en pause) 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 à l'invite de commande:

fg% 1

Si vous avez plusieurs processus en pause, alors vous devriez faire

emplois

pour voir la sortie.

3
abul

Les réponses précédentes sont correctes, mais pour une raison inconnue, Ctrl-Z suspend également tous les processus enfants, mais killall -SIGSTOP ... ne suspend que le processus le plus en avant (parent) et laisse les enfants s'exécuter à leur guise.

2
Kostas