Wenn ich versuche, etwas zu stoppen, benutze ich ^C
und manchmal ^D
im Terminal.
Was ist der Unterschied zwischen den beiden? Warum ein Programm nicht reagiert ^C
, aber ^D
. Warum wird die Terminal.app nur beendet, wenn ich sie verwende ^D
?
Wenn ich versuche, etwas zu stoppen, benutze ich ^C
und manchmal ^D
im Terminal.
Was ist der Unterschied zwischen den beiden? Warum ein Programm nicht reagiert ^C
, aber ^D
. Warum wird die Terminal.app nur beendet, wenn ich sie verwende ^D
?
Antworten:
CtrlCWeist das Terminal an, einen SIGINT
an den aktuellen Vordergrundprozess zu senden , was standardmäßig zum Beenden der Anwendung führt. CtrlDteilt dem Terminal mit, dass es eine EOF für die Standardeingabe registrieren soll, die als Verlangen nach dem Verlassen interpretiert wird.
Ctrl+ D( ^D
) bedeutet Dateiende . Es funktioniert nur am Anfang einer Zeile (ich vereinfache etwas) und hat keine Auswirkung, wenn das Programm keine Eingaben vom Terminal liest. ^D
Sagte der Shell in deinem Experiment, dass du keine Befehle mehr eingeben würdest, und sie wurde beendet. dann verließ das Terminal, weil sein Unterprogramm beendet worden war.
Ctrl+ C( ^C
) bedeutet "unterbrechen", dh aufhören, was Sie tun. Technisch gesehen ^C
sendet Drücken von das INT-Signal , das standardmäßig eine Anwendung beendet, in vielen Programmen jedoch bedeutet, dass Sie zur obersten Ebene zurückkehren (z. B. in einer Shell, beenden Sie die Eingabe einer Befehlszeile und kehren Sie zu einer ursprünglichen Eingabeaufforderung zurück).
Wenn ein Programm nicht reagiert, ^C
können Sie Ctrl+ \( ^\
) versuchen . Dadurch wird das Signal QUIT gesendet , das standardmäßig eine Anwendung beendet und von weniger Programmen abgefangen wird.
Eine weitere Taste, die 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 ähnelt STOP , TSTP kann jedoch ignoriert werden, STOP jedoch nicht.) Von der Shell aus können Sie die Ausführung des Programms mit dem fg
Befehl (Resume im Vordergrund) oder dem bg
Befehl (Resume im Vordergrund) fortsetzen Hintergrund).
Alle diese Tasten können mit dem stty
Befehl geändert werden . Einige Programme, insbesondere Vollbildprogramme mit Tastenbelegung, deaktivieren diese.
KeyboardInterrupt
? Es wird mit Strg + d (wenn am Anfang einer Zeile) und mit Strg + \ beendet.
Nachstehend ein Beispiel zu den beiden wirklich guten Antworten:
Wenn Sie python
die Shell eingeben, gelangen Sie zur >>> Eingabeaufforderung von Python.
Nun, wenn Sie treffen Ctrl+C
, wird es sagen KeyboardInterrupt
und in der >>> bleiben.
Wenn Sie in eine for-Schleife eintreten, z. B. durch Eingabe, wird for x in (text):
darauf gewartet, dass Sie mit einer ... -Aufforderung weitere Zeichen eingeben. Wenn Sie Ctrl+C
jetzt drücken, wird die for-Anweisung beendet und zur >>> -Aufforderung zurückgekehrt,
wenn Sie drücken Ctrl+D
Egal ob in >>> oder ... es wird die Python-Eingabeaufforderung verlassen und zur ursprünglichen Shell zurückgekehrt.
Wenn ssh auf einen anderen Computer übertragen Ctrl+C
wird, beendet a alle vorhandenen Befehle, Ctrl+D
führt dies aus und beendet den Computer ebenfalls. (Der Delete
Schlüssel ist auch der gleiche wie bei a Ctrl+D
)