Was ist der Unterschied zwischen ^C und ^D für UNIX/Mac OS X terminal?

Wenn ich versuche, etwas zu stoppen, verwende ich ^C und manchmal ^D im Terminal.

Was ist der Unterschied zwischen den beiden? Warum reagiert ein Programm nicht auf ^C, sondern auf ^D. Warum das Terminal.app wird nur beendet, wenn ich ^D verwende?

Author: XBlueCode, 2010-07-28

4 answers

StrgC weist das Terminal an, ein SIGINT zum aktuellen Vordergrundprozess, der standardmäßig zum Beenden der Anwendung führt. StrgD teilt dem Terminal mit, dass es einen EOF für die Standardeingabe registrieren soll, was bash als Wunsch zum Beenden interpretiert.

 81
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-07-28 21:06:39

Strg+D (^D) bedeutet Dateiende. Es funktioniert nur am Anfang einer Zeile (ich vereinfache ein wenig) und hat keine Auswirkungen, wenn das Programm keine Eingaben vom Terminal liest. In Ihrem Experiment teilte ^D der Shell mit, dass Sie keine Befehle mehr eingeben würden, also wurde es beendet; dann wurde das Terminal beendet, weil sein Unterprogramm beendet worden war.

Strg+C (^C) bedeutet "unterbrechen", dh stoppen Sie, was Sie tun. Technisch gesehen sendet das Drücken von ^C das INT-Signal , das standardmäßig eine Anwendung beendet, aber in vielen Programmen bedeutet, dass Sie auf die oberste Ebene zurückkehren (z. B. in einer Shell, Stoppen Sie die Eingabe einer Befehlszeile und gehen Sie zurück zu einer makellosen Eingabeaufforderung).

Wenn ein Programm nicht auf ^C reagiert, können Sie versuchen.+\ (^\). Dies sendet das QUIT-Signal, das standardmäßig eine Anwendung beendet und das nicht so viele Programme abfangen.

Ein anderer schlüssel, der ein Signal sendet, ist Ctrl+Z (^Z). Es sendet das TSTP-Signal, das das im Vordergrund laufende Programm anhält. (TSTP ist die Abkürzung für "terminal stop"; es ist ähnlich wie STOP aber TSTP kann ignoriert werden, während STOP nicht.) Von der Shell aus können Sie die Ausführung des Programms mit dem Befehl fg (im Vordergrund fortsetzen) oder dem Befehl bg (im Hintergrund fortsetzen) fortsetzen.

Alle diese Schlüssel können mit dem stty Befehl. Einige Programme, insbesondere Vollbildprogramme mit Tastenbindungen, deaktivieren sie.

 78
Author: Gilles 'SO- stop being evil',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-09-19 18:33:01

Hinzufügen zu den 2 wirklich guten Antworten oben, hier ist ein Beispiel:

Wenn Sie python in die Shell eingeben, gelangen Sie in Pythons > > > Eingabeaufforderung.

Wenn Sie nun Ctrl+C drücken, wird KeyboardInterrupt angezeigt und Sie bleiben in der >>>.
Wenn Sie eine for-Schleife eingeben, z. B. durch Eingabe von for x in (text):, wartet sie darauf, dass Sie weiter eingeben, indem Sie a anzeigen ... prompt, wenn Sie jetzt Ctrl+C drücken, wird die for-Anweisung beendet und zur > > > - Eingabeaufforderung
Wenn Sie Ctrl+D an einem beliebigen Punkt treffen, ob in >>> oder ... es beendet die Python-Eingabeaufforderung und kehrt zur ursprünglichen Shell zurück.

Wenn ssh in einen anderen Computer einsteigt, beendet ein Ctrl+C alle vorhandenen Befehle, Ctrl+D tut dies und verlässt den Computer ebenfalls. (Außerdem ist der Schlüssel Delete derselbe wie ein Ctrl+D)

 3
Author: Siddhartha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-01-29 02:57:42

Einige Programme enthalten die Signalverarbeitung mit sigaction, um nicht mit untergeordneten Prozessen zu kommunizieren. Wenn Sie während eines bestimmten Prozesses eines wichtigen Programms keine Signale senden möchten, wählen Sie die Signalverarbeitung zu implementieren. Dies kann Ihre Frage beantworten, warum einige Programme beim Senden eines SIGINT (^c) - Signals nicht beendet werden. Als Teil des vom Betriebssystem bereitgestellten Sicherheitsmechanismus ist SIGKILL (^d) so speziell, dass das Programm immer beendet wird.

 0
Author: David Petrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-08-17 21:50:46