Elenco dei segnali generati dal terminale (ad es. Ctrl-C -> SIGINT)


31

Dove posso trovare un elenco completo delle combinazioni di tastiere che inviano segnali in Linux?

Per esempio:

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

2
La "tastiera" non invia alcun segnale, lo fa la disciplina di linea. Scopri cos'è una disciplina lineare, quindi leggi man 1 stty.
Satō Katsura,

@SatoKatsura La disciplina di linea è una specie di driver di tastiera.
Gilles 'SO- smetti di essere malvagio'

@Gilles Non proprio. Il driver della tastiera si occupa di scancodes e simili. La disciplina della linea è una sorta di colla di livello superiore che offre all'applicazione una visione unificata su molte altre cose, come linee modem, adattatori da USB a seriale, dispositivi HID, ecc.
Satō Katsura,

@SatoKatsura Fa parte del sistema operativo che si trova tra l'applicazione e la tastiera. In altre parole, fa parte del driver della tastiera. Con un terminale hardware (come un vt100), è l'unica trasformazione dell'input da tastiera che viene eseguita dal computer rispetto al terminale stesso.
Gilles 'SO- smetti di essere malvagio'

Risposte:


27

La disciplina di linea N_TTY di Linux invia solo tre diversi segnali: SIGINT, SIGQUIT e SIGTSTP. Per impostazione predefinita, i seguenti caratteri di controllo producono i segnali:

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

Hmm, che dire di Ctrl-S e Ctrl-Q? Hai un riferimento per questo?
Tom Hale,

6
Nessun segnale è coinvolto quando si preme Ctrl-S o Ctrl-Q. Accelerano il flusso di personaggi, impedendo loro di raggiungere il processo di consumo. Alla fine, quando i buffer si riempiono, il processo di produzione si bloccherà nella chiamata del sistema di scrittura fino a quando Ctrl-Q non rallenta il flusso. Si noti che è normale che la chiamata possa essere bloccata anche senza Ctrl-S: se il processo di ricezione è lento a consumare i dati inviati, ad es. Perché sta trascorrendo la maggior parte del tempo a elaborare dati già ricevuti anziché leggere nuovi dati .
Johan Myréen,

1
man stty | grep -C1 signalè una fonte per questi tre essendo gli unici segnali generati dal terminale.
Tom Hale,

@TomHale ... Tranne i "segnali di controllo modem" sono segnali elettrici. :) Davvero, SIGINT, SIGQUITe SIGTSTPsono l'unica "soliti" segnali inviati dalla disciplina di linea. Su BSD hai anche cose del genere SIGINFO, ma non è standard.
Satō Katsura,

8

È possibile utilizzare sttyper controllare o modificare i caratteri che generano segnali.

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

intr(interrompere) genera SIGINT, quitgenera SIGQUIT, susp(sospendi) genera SIGTSTP. stty -amostrerà anche cose come start = ^Q; stop = ^S;e erase = ^?(backspace), che non inviano segnali ma influenzano il layer terminale in caso contrario.

Plain sttymostrerà le impostazioni non predefinite e ad es. stty intr ^QCambierebbe il carattere di interruzione ^Qinvece di^C .

Penso che ^L(feed modulo, nuova pagina) non sia una funzionalità terminale, ma un personaggio spesso usato dalle applicazioni per chiedere di ridisegnare la vista, ricontrollando allo stesso tempo le dimensioni della finestra.


1
^Lha un significato diverso per diverse applicazioni. Nella maggior parte delle cursesapplicazioni basate (come vim, less, mutt, mc, etc.) costringe il ridisegno completo (quindi ri-controllando la dimensione della finestra), ma in gusci ( bashetc.) semplicemente cancella la schermata. Non è SIGWINCHcoinvolto.
Satō Katsura,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.