Lista sygnałów generowanych przez terminal (np. Ctrl-C -> SIGINT)


31

Gdzie mogę znaleźć pełną listę kombinacji klawiszy, które wysyłają sygnały w systemie Linux?

Na przykład:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT

2
„Klawiatura” nie wysyła żadnych sygnałów, dyscyplina liniowa tak. Dowiedz się, czym jest dyscyplina liniowa, a następnie przeczytaj man 1 stty.
Satō Katsura

@SatoKatsura Dyscyplina liniowa jest rodzajem sterownika klawiatury.
Gilles „SO- przestań być zły”

@Gilles Niezupełnie. Sterownik klawiatury obsługuje skancody i tym podobne. Dyscyplina liniowa jest rodzajem kleju na wyższym poziomie, który zapewnia aplikacji jednolity widok na wiele innych rzeczy, takich jak linie modemowe, adaptery USB-na-szeregowe, urządzenia HID itp.
Satō Katsura

@SatoKatsura Jest to część systemu operacyjnego, która znajduje się pomiędzy aplikacją a klawiaturą. Innymi słowy, jest to część sterownika klawiatury. W przypadku terminala sprzętowego (takiego jak vt100) jest to jedyna transformacja klawiatury wprowadzana przez komputer w przeciwieństwie do samego terminala.
Gilles „SO- przestań być zły”

Odpowiedzi:


27

Dyscyplina linii Linux N_TTY wysyła tylko trzy różne sygnały: SIGINT, SIGQUIT i SIGTSTP. Domyślnie następujące znaki sterujące wytwarzają sygnały:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT
  • Ctrl+ Z- SIGTSTP

Hmm, a co z Ctrl-S i Ctrl-Q? Czy masz do tego referencje?
Tom Hale

6
Po naciśnięciu Ctrl-S lub Ctrl-Q nie są włączane żadne sygnały. Po prostu dławią przepływ znaków, uniemożliwiając im dotarcie do procesu konsumpcji. W końcu, gdy bufory się zapełniają, proces produkcyjny zablokuje się w zapisie wywołania systemowego, dopóki Ctrl-Q nie zablokuje przepływu. Zauważ, że normalne jest, że wywołanie zapisu może blokować nawet bez Ctrl-S: jeśli proces odbierania jest powolny, aby zużywać przesłane do niego dane, np. Ponieważ spędza większość czasu na przetwarzaniu już otrzymanych danych zamiast odczytywania nowych danych .
Johan Myréen

1
man stty | grep -C1 signaljest jednym źródłem dla tych trzech, które są jedynymi sygnałami generowanymi przez terminal.
Tom Hale

@TomHale ... Z wyjątkiem „sygnałów sterujących modemem” to sygnały elektryczne. :) Naprawdę SIGINT, SIGQUITi SIGTSTPsą tylko „zwykłe” sygnały wysyłane przez dyscypliny linii. Na BSD masz też takie rzeczy SIGINFO, ale to nie jest standardowe.
Satō Katsura

8

Możesz użyć sttydo sprawdzenia lub zmiany znaków generujących sygnały.

$ stty -a | grep -Ewoe '(intr|quit|susp) = [^;]+'
intr = ^C
quit = ^\
susp = ^Z

intr(przerwać) generuje SIGINT, quitgeneruje SIGQUIT, susp(zawiesza) generuje SIGTSTP. stty -apokaże także rzeczy takie jak start = ^Q; stop = ^S;i erase = ^?(backspace), które w przeciwnym razie nie wysyłają sygnałów, ale wpływają na warstwę końcową.

Zwykły sttypokaże ustawienia inne niż domyślne i np stty intr ^Q. Zmieni znak przerwania na ^Qzamiast ^C.

Myślę, że ^L(wysuw formularza, nowa strona) nie jest funkcją terminalu, ale postacią często używaną przez aplikacje, by poprosić o przerysowanie widoku, sprawdzając jednocześnie rozmiar okna.


1
^Lma inne znaczenie dla różnych aplikacji. W większości curseszastosowań opartych o (takich jak vim, less, mutt, mc, itd.) To wymusza pełną narysowany (zatem ponowne sprawdzenie rozmiaru okna), ale w muszli ( bashitp) to po prostu czyści ekran. Nie jest SIGWINCHzaangażowany.
Satō Katsura
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.