web-dev-qa-db-fra.com

Quelle est la différence entre ^ C et ^ D pour les terminaux UNIX / Mac OS X?

Lorsque j'essaie d'arrêter quelque chose, j'utilise ^ C et parfois ^ D dans le 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 lorsque j'utilise ^ D?

54
prosseek

CtrlC indique au terminal d'envoyer un SIGINT au processus de premier plan en cours, ce qui, par défaut, se traduit par la fermeture de l'application. CtrlD indique au terminal qu'il doit enregistrer un EOF sur l'entrée standard, ce que bash interprète comme une volonté de quitter.

56

Ctrl+D (^D) signifie fin du 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 a dit au shell que vous n'alliez plus taper de commandes, il s'est donc arrêté; puis le terminal est sorti parce que son sous-programme était terminé.

Ctrl+C (^C) signifie "interrompre", c’est-à-dire arrêter ce que vous faites. Techniquement, appuyer sur ^C envoie le signal INT , qui termine par défaut 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 en arrière). à 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 , qui met en pause le programme en cours d'exécution 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 commande fg (reprendre dans au premier plan) ou la commande bg (reprendre en arrière-plan).

Toutes ces clés peuvent être changées avec la commande stty . Certains programmes, notamment les programmes plein écran dotés de raccourcis clavier, les désactivent.

55
Gilles

En plus des 2 très bonnes réponses ci-dessus, voici un exemple:

Si vous tapez python dans le shell, vous accédez à >>> l'invite de python.

Maintenant, si vous appuyez sur Ctrl+C, il va dire KeyboardInterrupt et rester dans le >>>.
Si vous entrez dans une boucle for, par exemple: en tapant for x in (text):, il attend que vous dactylographiez davantage en affichant un message ... invite, si vous appuyez sur Ctrl+C maintenant, il quittera l'instruction for et retournera à l'invite >>>
Si vous appuyez sur Ctrl+D à un moment quelconque, que ce soit dans >>> ou ..., il sortira de l'invite python et retournera au shell d'origine.

De même, si ssh'ed sur une autre machine, un Ctrl+C mettra fin à toute commande existante, Ctrl+D le fera et sortira également de la machine. (De plus, la clé Delete est identique à un Ctrl+D)

2
Siddhartha