Question Qu'est-ce qui est différent entre Ctrl + Z et Ctrl + C dans la ligne de commande Unix?


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

Cette question était un Super User Question de la semaine.
  Lire le 13 mars 2011 entrée de blog pour plus de détails ou soumettre votre propre Question de la semaine.


177
2018-03-27 00:39


origine




Réponses:


Contrôle+Z est utilisé pour suspendre un processus en lui envoyant le signal SIGSTOP, qui ne peut pas être intercepté par le programme. Tandis que Contrôle+C est utilisé pour tuer un processus avec le signal SIGINT, et peut être intercepté par un programme afin de pouvoir se nettoyer avant de quitter, ou de ne pas quitter 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 du shell. Lorsque vous suspendez un processus, vous pouvez également faire des choses fantaisistes. Par exemple, en exécutant ceci:

fg

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

Et lancer la commande

bg

Avec un programme suspendu, cela lui permettra de fonctionner en arrière-plan (la sortie du programme ira cependant au TTY).

Si vous voulez tuer un programme suspendu, vous n'avez pas à le ramener avec fg Tout d'abord, vous pouvez simplement faire la commande:

kill %1

Si vous avez plusieurs commandes suspendues, exécutez

jobs

les listera, comme ceci:

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

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


234
2018-03-27 01:15



Vous pouvez changer les clés pour quelle tâche en utilisant le stty commander. Par exemple stty susp ^Z  ou stty intr ^C. - RedGrittyBrick
En fait, il envoie SIGTSTP, qui peut être intercepté. - Simon Richter
Cool! Donc, si un programme refuse de mourir avec Ctrl + C, comment forcer le tuer? - Aditya M P
@adityamenon Trouvez le nom de l'exécutable, par exemple amarok et courir killall amarok, ou courir ps aux et trouver l'ID de processus à côté du nom de l'exécutable et exécuter kill {process id}. - Bruno Finger


Ctrl + Z suspend le processus avec SIGTSTP, vous pouvez le reprendre plus tard. Ctrl + C supprime le processus avec SIGINT, qui termine le processus à moins qu'il ne soit géré / ignoré par la cible, de sorte que 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 la contrepartie à la fois de SIGSTOP et de SIGTSTP qui suspend le processus.


22
2018-03-27 00:43



Non, c'est SIGTSTP, pas SIGSTOP et il peut être intercepté. - sch
@sch, est-ce correct maintenant? - Ben Voigt
Oui, bien que Ctrl-Z (et CTRL-C) provoque un processus groupe (le groupe de processus de premier plan du terminal) pour recevoir ce signal, pas nécessairement un seul processus. Notez également que SIGTTIN et SIGTTOU ont été envoyés à des processus ne figurant pas dans le groupe de processus de premier plan du terminal lorsque vous tentez ensuite de lire ou d’écrire depuis / vers ce dernier, qui les suspend également. - sch
@sch: Le processus vs le groupe n'est-il qu'une différence dans la façon dont le signal est envoyé? IRC kill() vous permet d'envoyer SIGSTOP à un groupe très bien. - Ben Voigt
Oui, ma commande concernait votre CTRL-Z suspend le processus ... qui peut induire les gens en erreur en leur faisant croire qu’elle est envoyée à un seul processus emploi ou groupe de processus. - sch


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, vous devriez faire

jobs

pour voir le résultat et sélectionner le nombre approprié à reprendre, par ex.

fg %3

reprend le troisième emploi dans la liste. Vous pouvez également avoir des travaux en cours d'exécution en arrière-plan avec

bg %n

où n est le numéro de travail.


17
2018-03-27 11:52



C'est des tâches (groupes de processus), pas des processus avec lesquels CTRL-C, CTRL-Z, fg et bg traitent. - sch


Cntrl + Z pause the currently running process. 

Et

Cntrl + C simply terminates the running process.

En utilisant 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
2018-03-13 06:48





CTRL+Z arrête un travail

CTRL+Cmet fin à un emploi

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, vous devriez faire

emplois

pour voir la sortie.


3
2017-07-03 15:57





Les réponses précédentes sont correctes, mais pour une raison inconnue, Ctrl-Z suspend également tous les processus enfants, mais killall -SIGSTOP ... suspend uniquement le processus (parent) au premier plan et laisse les enfants s'exécuter comme ils le souhaitent.


2
2018-02-26 17:19