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

94

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

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

    
posée chaitanya lakkundi 13.08.2014 - 15:50
la source

6 réponses

128

Si nous laissons les bordures de côté, la différence est simple. Contrôle + C interrompt l’application presque immédiatement alors que Control + Z le lance en arrière-plan, suspendu.

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

  • Contrôle + C (caractère de contrôle intr ) envoie SIGINT qui interrompt l'application. En général, cela provoque l’abandon, mais c’est à l’application de décider.

  • Contrôle + Z (caractère de contrôle susp ) envoie SIGTSTP à une application de premier plan, la mettant effectivement en arrière-plan, suspendue. Ceci est utile si vous avez besoin de sortir de quelque chose comme un éditeur pour récupérer des données dont vous avez besoin. Vous pouvez retourner dans l'application en exécutant fg (ou %xx est le numéro du travail, comme indiqué dans jobs ).

    Nous pouvons tester ceci en exécutant nano TEST , puis en appuyant sur Control + Z , puis en exécutant ps aux | grep TEST . Cela nous montrera que le processus nano est 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 encore en vie, mais il ne fonctionne pas ... Il peut être repris.

    Certaines applications se bloquent si elles ont des processus externes en cours (comme une requête Web) qui peuvent expirer pendant leur sommeil.

réponse donnée Oli 13.08.2014 - 15:56
la source
14

Contrôle + Z suspend un processus ( SIGTSTP ) et Contrôle + C interrompt un processus ( SIGINT )

lien

  

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

lien

  

Dans les systèmes POSIX, la séquence fait en sorte que le programme actif reçoive un signal SIGINT. Si le programme ne spécifie pas comment gérer cette condition, il est terminé. Généralement, un programme qui gère un SIGINT se terminera tout de même, ou au moins terminera la tâche qui s'exécute à l'intérieur

    
réponse donnée Sleep Deprived Bulbasaur 13.08.2014 - 15:56
la source
9

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

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

Cependant, quand un processus est suspendu, nous pouvons le reprendre avec fg (resume in forground) et bg (resume in background) , mais je ne peux pas reprendre un processus tué, c'est une différence entre Ctrl + C et amp; Ctrl + Z .

Comment afficher le processus suspendu?

En utilisant la commande jobs, la sortie sera:

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

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

En utilisant la commande kill :

kill% n n sera un nombre affiché dans la commande jobs, donc je veux tuer cat: kill %1 .

    
réponse donnée nux 14.08.2014 - 09:49
la source
6

Cela devrait vous aider

  

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

    
réponse donnée Graham 13.08.2014 - 15:58
la source
3

lorsque vous appuyez sur ctrl + c , cela signifie que vous envoyez SIGINT à votre processus. comme vous tapez cette commande: kill -SIGINT <your_pid> . Cela va vous tuer votre processus. C'est pourquoi vous ne pouvez pas le voir lorsque vous lancez 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 est toujours en vie. Vous pouvez donc réactiver votre processus en envoyant SIGCONT à votre processus.

    
réponse donnée P_O_I_S_O_N 14.08.2014 - 09:24
la source
3

Pour le dire simplement:

  • CTRL - C demande que le programme abandonne .

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

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

réponse donnée thomasrutter 15.08.2014 - 02:39
la source

Lire d'autres questions sur les étiquettes