2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

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. Que sont-ils et quelle est la différence entre eux ?

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

Réponses (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z est utilisé pour suspendre un processus en lui envoyant le signal SIGSTOP, qui ne peut ê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 confirmation autre que d'être ramené à une invite du shell. Lorsque vous suspendez un processus, vous pouvez aussi en faire des choses fantaisistes. Par exemple, exécuter ceci :

fg

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

Et exécuter la commande

bg

Avec un programme suspendu lui permettra de s'exécuter en arrière-plan (la sortie du programme ira quand même à l'ATS). Si vous voulez tuer un programme suspendu, vous n'avez pas besoin de le ramener avec fg d'abord, vous pouvez simplement faire la commande :

kill %1

Si vous avez plusieurs commandes suspendues, exécuter

jobs

les listera, comme ceci :

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

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

22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z suspend le processus avec SIGTSTP, vous pouvez le reprendre plus tard. Ctrl+C tue le processus avec SIGINT, qui termine le processus à moins qu'il ne soit manipulé/noté par la cible, donc vous ne pouvez pas le reprendre. Il y a aussi un SIGSTOP qui peut être envoyé par kill() et que le processus ne peut pas intercepter. SIGCONT est le pendant de SIGSTOP et SIGTSTP qui désactive le processus.

18
18
18
2011-03-27 11:52:36 +0000

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

CTRL+C termine 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 alors vous devez faire

jobs

pour voir la sortie et sélectionner le numéro approprié pour reprendre e. g.

fg %3

reprend le troisième emploi de la liste. Vous pouvez également avoir des emplois fonctionnant en arrière-plan avec

bg %n

où n est le numéro de l'emploi.

3
3
3
2014-07-03 15:57:10 +0000

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

CTRL+C termine 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 devez faire

travaux

pour voir le résultat.

3
3
3
2014-03-13 06:48:21 +0000
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. où comme en utilisant Cntrl + Z vous pouvez reprendre le processus.

utilisez fg %1 pour reprendre le processus.

2
2
2
2013-02-26 17:19:22 +0000

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