Liste des signaux générés par le terminal (par exemple Ctrl-C -> SIGINT)


31

Où puis-je trouver une liste complète des combinaisons de clavier qui envoient des signaux sous Linux?

Par exemple:

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

2
Le "clavier" n'envoie aucun signal, la discipline de ligne le fait. Découvrez ce qu'est une discipline de ligne, puis lisez man 1 stty.
Satō Katsura

@SatoKatsura La discipline de ligne est une sorte de pilote de clavier.
Gilles 'SO- arrête d'être méchant'

@ Gilles Pas vraiment. Le pilote de clavier traite les scancodes et similaires. La discipline de ligne est une sorte de colle de niveau supérieur qui donne à l'application une vue unifiée sur bien d'autres choses, comme les lignes de modem, les adaptateurs USB vers série, les appareils HID, etc.
Satō Katsura

@SatoKatsura C'est une partie du système d'exploitation qui se trouve entre l'application et le clavier. En d'autres termes, cela fait partie du pilote de clavier. Avec un terminal matériel (comme un vt100), c'est la seule transformation d'entrée clavier effectuée par l'ordinateur par opposition au terminal lui-même.
Gilles 'SO- arrête d'être méchant'

Réponses:


27

La discipline de ligne Linux N_TTY envoie uniquement trois signaux différents: SIGINT, SIGQUIT et SIGTSTP. Par défaut, les caractères de contrôle suivants produisent les signaux:

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

Hmm, qu'en est-il de Ctrl-S et Ctrl-Q? Avez-vous une référence pour cela?
Tom Hale

6
Aucun signal n'est impliqué lorsque vous appuyez sur Ctrl-S ou Ctrl-Q. Ils limitent simplement le flux de caractères, les empêchant d'atteindre le processus consommateur. Finalement, lorsque les tampons se remplissent, le processus de production bloque l'appel système d'écriture jusqu'à ce que Ctrl-Q libère le flux. Notez qu'il est normal que l'appel à écrire puisse bloquer même sans Ctrl-S: si le processus de réception est lent à consommer les données qui lui sont envoyées, par exemple parce qu'il passe la plupart de son temps à traiter les données déjà reçues au lieu de lire de nouvelles données .
Johan Myréen

1
man stty | grep -C1 signalest une source pour ces trois étant les seuls signaux générés par le terminal.
Tom Hale

@TomHale ... Sauf que les "signaux de commande du modem" sont des signaux électriques. :) Vraiment, SIGINT, SIGQUITet SIGTSTPsont les seuls signaux « habituels » envoyé par la discipline de ligne. Sur BSD, vous avez également des choses comme SIGINFO, mais ce n'est pas standard.
Satō Katsura

8

Vous pouvez utiliser sttypour vérifier ou modifier les caractères qui génèrent des signaux.

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

intr(interruption) génère SIGINT, quitgénère SIGQUIT, susp(suspend) génère SIGTSTP. stty -amontrera également des choses comme start = ^Q; stop = ^S;et erase = ^?(retour arrière), qui n'envoient pas de signaux mais affectent la couche terminale autrement.

Plain sttyaffichera les paramètres non par défaut et stty intr ^Qchangerait par exemple le caractère d'interruption à la ^Qplace de ^C.

Je pense que ^L(flux de formulaire, nouvelle page) n'est pas une fonctionnalité de terminal, mais un personnage souvent utilisé par les applications pour demander à redessiner la vue, en revérifiant la taille de la fenêtre en même temps.


1
^La une signification différente pour différentes applications. Dans la plupart des cursesapplications à base ( par exemple vim, less, mutt, mc, etc.) , il force un rafraîchissement complet (donc re-vérification de la taille de la fenêtre), mais dans des coquilles ( bashetc.) , il efface tout l'écran. Il n'y en a pas SIGWINCH.
Satō Katsura
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.