web-dev-qa-db-fra.com

Quelle est la différence entre Ctrl-z et Ctrl-c dans le terminal?

Quelqu'un peut-il me dire la différence entre ctrl+z et ctrl+c?

Lorsque je suis dans le terminal, les deux combinaisons arrêtent le processus en cours, mais quelle est exactement la différence entre les deux?

115
chaitanya lakkundi

Si nous laissons les cas Edge de côté, la différence est simple. Control+C avorte l'application presque immédiatement alors que Control+Z le shunts dans le fond, suspendu.

Le shell envoie différents signaux aux applications sous-jacentes sur ces combinaisons:

  • Control+C (caractère de contrôle intrname__) envoie SIGINT qui interrompra l'application. Généralement, il provoque l’abandon, mais c’est à l’application de décider.

  • Control+Z (caractère de contrôle suspname__) envoie SIGTSTP à une application de premier plan, le mettant effectivement en arrière-plan, suspendu. Ceci est utile si vous avez besoin de sortir d'un éditeur de texte pour récupérer des données dont vous aviez besoin. Vous pouvez revenir à l'application en exécutant fg(ou %xxcorrespond au numéro de travail indiqué dans jobsname__).

    Nous pouvons le tester en exécutant nano TEST, puis en appuyant sur Control+Z et ensuite exécuter ps aux | grep TEST. Cela nous montrera que le processus nanoest toujours en cours d'exécution:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    De plus, nous pouvons voir (à partir de ce T, qui se trouve dans la colonne d'état) que le processus a été arrêté . Donc, il est toujours en vie, mais il ne fonctionne pas ... Il peut être repris.

    Certaines applications se bloqueront si elles ont des processus externes en cours (comme une demande Web) pouvant expirer pendant leur sommeil.

151
Oli

Control+Z suspend un processus (SIGTSTP) et Control+C interrompt un processus (SIGINT)

http://en.wikipedia.org/wiki/Control-Z

Sur les systèmes de type Unix, Control + Z est le mappage de clavier par défaut le plus courant pour la séquence de touches qui suspend un processus.

http://en.wikipedia.org/wiki/Control-C

Dans les systèmes POSIX, la séquence entraîne la réception d'un signal SIGINT par le programme actif. Si le programme ne spécifie pas comment gérer cette condition, elle est terminée. En règle générale, un programme qui gère un SIGINT se termine toujours ou met au moins fin à la tâche en cours d'exécution à l'intérieur de celui-ci.

14

Ctrl+C est utilisé pour tuer un processus avec le signal SIGINTname__, autrement dit, il s'agit d'une politesse kill.

Ctrl+Z est utilisé pour suspendre un processus en lui envoyant le signal SIGTSTPname__, qui est comme un signal de sommeil, qui peut être annulé et le processus peut être repris à nouveau.

Cependant, quand un processus est suspendu, nous pouvons le reprendre à nouveau avec fg(reprendre au premier plan) et bg(reprendre en arrière-plan), mais je ne peux pas reprendre un processus tué, c’est une différence entre Ctrl+C Et Ctrl+Z.

Comment pouvons-nous visualiser processus suspendus?

La commande jobsdonne le résultat suivant:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Comment tuer un processus suspendu en arrière-plan?

En utilisant la commande killname__:

kill %nnest le numéro affiché par la commande jobsname__. Donc, si je veux tuer le chat: kill %1.

12
nux

This devrait aider

Ctrl+Z est utilisé pour suspendre un processus en lui envoyant le signal SIGSTOP, qui ne peut pas être intercepté par le programme. Tandis que Ctrl+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.

5
Graham

Pour le dire simplement:

  • CTRL-C demande que le programme abandon.

  • CTRL-Z force le programme à suspendre et aller en arrière-plan.

    Cela vous permet de le reprendre plus tard avec la commande fgname__. Les tâches d'arrière-plan restantes sont supprimées lorsque vous quittez le shell de connexion.

4
thomasrutter

quand vous appuyez sur ctrl+c, cela signifie que vous envoyez SIGINT à votre processus. comme vous tapez cette commande: kill -SIGINT <your_pid>. Cela vous tuera votre processus. C'est pourquoi vous ne pouvez pas le voir lorsque vous exécutez la commande ps.
Lorsque vous appuyez sur ctrl+z, cela signifie que vous envoyez SIGSTOP à votre processus. comme vous tapez cette commande: kill -SIGKSTOP <your_pid>. Cela arrêtera votre processus, mais le processus sera toujours actif. Vous pouvez donc réactiver votre processus en envoyant SIGCONT à votre processus.

4
P_O_I_S_O_N