Liste der vom Terminal erzeugten Signale (zB Strg-C -> SIGINT)

30

Wo finde ich eine vollständige Liste der Tastaturkombinationen, die unter Linux Signale senden?

Z.B:

  • Ctrl+ C- ZEICHEN
  • Ctrl+ \- ZEICHEN
Tom Hale
quelle
2
Die "Tastatur" sendet keine Signale, die Liniendisziplin. Finden Sie heraus, was eine Liniendisziplin ist, und lesen Sie dann man 1 stty.
Satō Katsura
@SatoKatsura Die Zeilendisziplin ist eine Art Tastaturtreiber.
Gilles 'SO- hör auf böse zu sein'
@ Gilles Nicht wirklich. Der Tastaturtreiber befasst sich mit Scancodes und dergleichen. Die Liniendisziplin ist eine Art übergeordneter Klebstoff, der der Anwendung einen einheitlichen Überblick über viele andere Dinge gibt, wie z. B. Modemleitungen, USB-zu-Seriell-Adapter, HID-Geräte usw.
Satō Katsura,
@SatoKatsura Dies ist ein Teil des Betriebssystems, der sich zwischen der Anwendung und der Tastatur befindet. Mit anderen Worten, es ist Teil des Tastaturtreibers. Bei einem Hardware-Terminal (wie dem vt100) ist dies die einzige Umwandlung der Tastatureingabe, die der Computer im Gegensatz zum Terminal selbst vornimmt.
Gilles 'SO - hör auf, böse zu sein',

Antworten:

27

Die Linux N_TTY-Leitungsdisziplin sendet nur drei verschiedene Signale: SIGINT, SIGQUIT und SIGTSTP. Standardmäßig erzeugen die folgenden Steuerzeichen die Signale:

  • Ctrl+ C- ZEICHEN
  • Ctrl+ \- ZEICHEN
  • Ctrl+ Z- SIGTSTP
Johan Myréen
quelle
Hmm, was ist mit Strg-S und Strg-Q? Haben Sie eine Referenz dafür?
Tom Hale
6
Wenn Sie Strg-S oder Strg-Q drücken, sind keine Signale beteiligt. Sie drosseln nur den Fluss der Charaktere und verhindern, dass sie den verzehrenden Prozess erreichen. Wenn die Puffer voll sind, blockiert der erzeugende Prozess schließlich den Schreibsystemaufruf, bis Strg-Q den Fluss drosselt. Beachten Sie, dass der Schreibvorgang normalerweise auch ohne Strg-S blockiert werden kann: Wenn der Empfangsprozess die an ihn gesendeten Daten nur langsam verarbeitet, z. B. weil er die meiste Zeit damit verbringt, bereits empfangene Daten zu verarbeiten, anstatt neue Daten zu lesen .
Johan Myréen
1
man stty | grep -C1 signalist eine Quelle für diese drei, die die einzigen vom Terminal erzeugten Signale sind.
Tom Hale
@TomHale ... Mit Ausnahme von "Modemsteuersignalen" handelt es sich um elektrische Signale. :) Wirklich SIGINT, SIGQUITund SIGTSTPnur die „übliche“ Signale , die von der Linie Disziplin gesendet. Auf BSD haben Sie auch Dinge wie SIGINFO, aber das ist nicht Standard.
Satō Katsura
8

Mit können Sie sttydie Zeichen überprüfen oder ändern, die Signale erzeugen.

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

intr(Interrupt) generiert SIGINT, quitgeneriert SIGQUIT, susp(Suspend) generiert SIGTSTP. stty -azeigt auch Dinge wie start = ^Q; stop = ^S;und erase = ^?(Rücktaste) an, die keine Signale senden, aber ansonsten die Terminalebene beeinflussen.

Plain sttyzeigt die nicht standardmäßigen Einstellungen an und stty intr ^Qwürde zB das Interrupt-Zeichen auf ^Qanstatt ändern ^C.

Ich denke, ^L(Formular-Feed, neue Seite) ist keine Terminal-Funktion, sondern ein Zeichen, das häufig von Anwendungen verwendet wird, um nach einem Neuzeichnen der Ansicht zu fragen und gleichzeitig die Fenstergröße zu überprüfen.

ilkkachu
quelle
1
^Lhat für verschiedene Anwendungen eine unterschiedliche Bedeutung. In den meisten curses-basierten Anwendungen (wie vim, less, mutt, mc, etc.) zwingt einen kompletten Neuaufbau (also erneut überprüft die Fenstergröße), aber in Schalen ( bashetc.) es löscht nur den Bildschirm. Es ist nicht SIGWINCHbeteiligt.
Satō Katsura