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?
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 intr
name__) 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 susp
name__) 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 %x
où x
correspond au numéro de travail indiqué dans jobs
name__).
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 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 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.
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.
Ctrl+C est utilisé pour tuer un processus avec le signal SIGINT
name__, autrement dit, il s'agit d'une politesse kill.
Ctrl+Z est utilisé pour suspendre un processus en lui envoyant le signal SIGTSTP
name__, 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 jobs
donne le résultat suivant:
[1]- Stopped cat
[2]+ Stopped vi
Comment tuer un processus suspendu en arrière-plan?
En utilisant la commande kill
name__:
kill %n
où n
est le numéro affiché par la commande jobs
name__. Donc, si je veux tuer le chat: kill %1
.
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.
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 fg
name__. Les tâches d'arrière-plan restantes sont supprimées lorsque vous quittez le shell de connexion.
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.