Kiedy próbuję coś zatrzymać, używam, ^C
a czasem ^D
w terminalu.
Jaka jest różnica między nimi? Dlaczego niektóre programy nie reagują ^C
, ale ^D
. Dlaczego Terminal.app po prostu kończy pracę, gdy używam ^D
?
terminal
terminal.app
prosseek
źródło
źródło
Odpowiedzi:
CtrlCmówi terminalowi, aby wysłał
SIGINT
do bieżącego procesu pierwszego planu, co domyślnie przekłada się na zakończenie aplikacji. CtrlDmówi terminalowi, że powinien zarejestrować EOF na standardowym wejściu, co bash interpretuje jako chęć wyjścia.źródło
Ctrl+ D(
^D
) oznacza koniec pliku . Działa tylko na początku linii (trochę upraszczam) i nie działa, jeśli program nie odczytuje danych wejściowych z terminala. W swoim eksperymencie^D
powiedz powłoce, że nie zamierzasz pisać więcej poleceń, więc zakończyło się; następnie terminal wyszedł, ponieważ jego podprogram zakończył się.Ctrl+ C(
^C
) oznacza „przerwać”, tzn. zatrzymać to, co robisz. Technicznie, naciśnięcie^C
wysyła sygnał INT , który domyślnie kończy aplikację, ale co w wielu programach oznacza powrót na najwyższy poziom (np. W powłoce, przestań pisać wiersz poleceń i powróć do nieskazitelnego monitu).Jeśli program nie odpowiada
^C
, możesz spróbować Ctrl+ \(^\
). To wysyła sygnał QUIT , który domyślnie kończy aplikację i który nie przechwytuje tak wielu programów.Kolejnym kluczem wysyłającym sygnał jest Ctrl+ Z(
^Z
). Wysyła sygnał TSTP , który wstrzymuje działanie programu na pierwszym planie. (TSTP to skrót od „terminal stop”; jest podobny do STOP, ale TSTP można zignorować, a STOP nie.) Z poziomu powłoki można wznowić wykonywanie tego programu za pomocąfg
polecenia (wznowienie na pierwszym planie) lubbg
polecenia (wznowienie w tło).Wszystkie te klucze można zmienić za pomocą
stty
polecenia. Niektóre programy, szczególnie programy pełnoekranowe, które mają przypisania klawiszy, wyłączają je.źródło
KeyboardInterrupt
? Kończy się, naciskając ctrl + d (jeśli jest na początku wiersza) i ctrl + \.Dodając do 2 naprawdę dobrych odpowiedzi powyżej, oto przykład:
Jeśli wpiszesz
python
powłokę, pojawi się pytanie >>> w pythonie.Teraz, jeśli uderzysz
Ctrl+C
, powieKeyboardInterrupt
i pozostanie w >>>.Jeśli wejdziesz w pętlę for, np. Wpisując
for x in (text):
, czeka ona na dalsze pisanie przez wyświetlenie monitu ..., jeśliCtrl+C
teraz naciśniesz , wyjdzie z instrukcji for i powróci do monitu >>>Jeśli naciśniesz
Ctrl+D
w dowolnym momencie, czy w >>>, czy ... wyjdzie z monitu python i powróci do oryginalnej powłoki.Podobnie, jeśli ssh'ed na innym komputerze, a
Ctrl+C
przerwie wszelkie istniejące polecenia,Ctrl+D
zrobi to i wyjdzie również z komputera. (RównieżDelete
klucz jest taki sam jak robienie aCtrl+D
)źródło