Lorsque j'essaie d'arrêter quelque chose, j'utilise ^C
et parfois ^D
en terminal.
Quelle est la différence entre les deux? Pourquoi certains programmes ne répondent pas ^C
, mais ^D
. Pourquoi Terminal.app se ferme-t-il quand j'utilise ^D
?
Lorsque j'essaie d'arrêter quelque chose, j'utilise ^C
et parfois ^D
en terminal.
Quelle est la différence entre les deux? Pourquoi certains programmes ne répondent pas ^C
, mais ^D
. Pourquoi Terminal.app se ferme-t-il quand j'utilise ^D
?
Réponses:
CtrlCindique au terminal d'envoyer un message SIGINT
au processus de premier plan en cours, ce qui, par défaut, se traduit par la fermeture de l'application. CtrlDindique au terminal qu'il doit enregistrer un EOF sur une entrée standard, ce que bash interprète comme un désir de sortir.
Ctrl+ D( ^D
) signifie fin de fichier . Cela ne fonctionne qu'au début d'une ligne (je simplifie un peu), et n'a aucun effet si le programme ne lit pas les entrées du terminal. Dans votre expérience, ^D
vous avez dit au shell que vous n’alliez plus taper de commandes, il s’est arrêté; puis le terminal est sorti parce que son sous-programme était terminé.
Ctrl+ C( ^C
) signifie “interrompre”, c.-à-d. arrêtez ce que vous faites. Techniquement, appuyer sur ^C
envoie le signal INT qui, par défaut, met fin à une application, mais qui, dans de nombreux programmes, signifie revenir au niveau supérieur (par exemple, dans un shell, arrêtez de taper une ligne de commande et revenez à une invite vierge).
Si un programme ne répond pas ^C
, vous pouvez essayer Ctrl+ \( ^\
). Cela envoie le signal QUIT qui, par défaut, met fin à une application et que peu de programmes interceptent.
Une autre touche qui envoie un signal est Ctrl+ Z( ^Z
). Il envoie le signal TSTP , ce qui met en pause le programme exécuté au premier plan. (TSTP est l'abréviation de “terminal stop”; il est similaire à STOP mais TSTP peut être ignoré alors que STOP ne le peut pas.) À partir du shell, vous pouvez reprendre l'exécution de ce programme avec la fg
commande (resume au premier plan) ou la bg
commande (resume au début). Contexte).
Toutes ces clés peuvent être changées avec la stty
commande. Certains programmes, notamment les programmes plein écran dotés de raccourcis clavier, les désactivent.
KeyboardInterrupt
? Il se ferme avec ctrl + d (si au début d'une ligne), et avec ctrl + \.
Ajoutant aux 2 très bonnes réponses ci-dessus, voici un exemple:
Si vous tapez python
dans le shell, cela vous mènera à l'invite >>> de python.
Maintenant, si vous frappez Ctrl+C
, il dira KeyboardInterrupt
et restera dans le >>>.
Si vous entrez dans une boucle for, par exemple en le saisissant for x in (text):
, attend de taper plus en affichant une invite ..., si vous appuyez Ctrl+C
maintenant, il sortira de l'instruction for et retournera à l'invite >>>
Si vous appuyez sur Ctrl+D
à tout moment, que ce soit dans >>> ou ..., il sortira de l'invite de python et retournera au shell d'origine.
De même, si ssh'ed sur une autre machine, a Ctrl+C
mettra fin à toute commande existante, le Ctrl+D
fera et sortira également de la machine. (En outre, la Delete
clé est la même chose que faire a Ctrl+D
)