Come sbloccare dopo aver premuto Ctrl-S in un terminale?


728

È una situazione che mi è successa abbastanza spesso: dopo aver premuto (con un'intenzione diversa) Ctrl-Sin un terminale, l'interazione (input o output) è bloccata. Probabilmente è una sorta di "blocco scorrimento" o altro.

Come posso sbloccare il terminale dopo questo?

(Questa volta, ho lavorato con apt-shelldentro un bashinterno - urxvtnon sono sicuro di chi sia responsabile della gestione speciale di Ctrl-S: stavo cercando la cronologia dei comandi all'indietro C-r, come al solito per readline, ma poi volevo tornare "indietro "avanza nella storia con il solito - almeno in Emacs - C-s( 1 , 2 , 3 ), ma ciò ha causato il congelamento del terminale. Bene, lo scorrimento / il paging per visualizzare le cose passate funziona ancora nel terminale, ma nessuna interazione con i processi eseguiti lì.)


23
Stavo lavorando vime ho premuto Ctrl-S per salvare le mie modifiche. Uh-ohXD
ADTC

4
Perché esiste al primo posto?
neverMind9,

Risposte:


861

Ctrl-Q

Per disabilitarlo del tutto, inserisci stty -ixonuno script di avvio. Per consentire a qualsiasi tasto di far fluire di nuovo le cose, utilizzare stty ixany.

ps: Non è né il terminale né la shell che lo fa, ma il driver del terminale del sistema operativo.


8
Grazie! A proposito, ci hanno suggerito Ctrl-C; funziona anche tu? (E in un altro posto , hanno suggerito Ctrl-Q, proprio come te.)
imz - Ivan Zakharyaschev

23
Ctrl-C funziona, ma invia anche un segnale di interruzione, che generalmente non si vorrebbe. (A proposito, le chiavi utilizzate per queste cose sono tutte configurabili tramite stty.)
ak2

2
Ricordo di aver provato questa combinazione sulla mia Apple] [clone, e ha funzionato anche lì - Ctrl-Se poi Ctrl-Qdi riprendere.
sashoalm,

19
GRAZIE DIO !! Questo è stato qualcosa che mi infastidisce da anni. Non sono sicuro del motivo per cui VIM non ha implementato questo come scorciatoia nativa per il salvataggio invece di qualunque cosa diavolo faccia. Buono a sapersi che c'è una via di fuga dal carcere che è lo schermo VIM congelato a causa dell'uso naturale di CTRL + S (salva scorciatoia) che è applicabile in quasi tutte le applicazioni TRANNE VIM.
Kraang Prime,

8
@SanuelJackson Ctrl-S "salva scorciatoia" è applicabile in quasi tutte le applicazioni DESKTOP EXCEPT vim. E tranne Emacs. E Nano. E ogni altra "applicazione" che puoi eseguire su un terminale, proprio perché è già utilizzata dal terminale per il controllo del flusso. È la stessa ragione per cui non troverai un'applicazione desktop Linux usando le scorciatoie Ctrl-Alt-FN: perché sono già utilizzate dal sistema.
Gerlos,

383

Ctrl- Qè davvero la risposta. Ho pensato di gettare un po 'di storia di questo che è troppo lungo per adattarsi ai margini della risposta corretta di Ak2 .

Nei secoli bui, un terminale era una grande apparecchiatura che si collegava a un dispositivo remoto (originariamente un altro terminale perché i teletipi erano molto più facili da imparare a utilizzare di una chiave telegrafica) su un lungo filo o tramite linee telefoniche con modem. Quando Unix si stava sviluppando, il codice ASCII era già ben consolidato (sebbene il codice EBCDIC concorrente di IBM fosse ancora una forza da non sottovalutare).

I primi terminali conservavano un registro stampato di ogni personaggio ricevuto. Finché i personaggi non sono arrivati ​​più velocemente di quanto la testina di stampa potesse scriverli, almeno. Ma non appena sono stati possibili terminali basati su CRT, è emerso il problema che solo circa 25 linee si adattano al CRT e 25 linee di 80 caratteri rappresentavano abbastanza RAM che nessuno pensava seriamente di fornire più RAM per i caratteri che erano scesi dalla cima di lo schermo.

Quindi era necessaria una convenzione per segnalare che l'estremità di invio doveva fermarsi per consentire al lettore di recuperare.

Il codice ASCII a 7 bit ha 33 punti di codice dedicati ai caratteri di controllo (da 0 a 31 e 127). Alcuni di coloro che hanno avuto scopi molto ben consolidate, come ad esempio NUL(leader nastro di carta bianca per la filettatura, lacune, e giunzioni), DEL( "cancellato" caratteri su nastro di carta indicati dalla punzonatura tutti i sette buche), BEL(ding!), CR, LF, E TAB. Ma quattro sono stati definiti esplicitamente per controllare il dispositivo terminale stesso ( DC1ad DC4alias Ctrl + Q, Ctrl + R, Ctrl + S e Ctrl + T).

La mia ipotesi migliore è che alcuni ingegneri pensassero che (come dicono gli mnemonici), "S" per "Stop" e "Q" per "Continua" non erano poi così male, e assegnati DC3a significare "per favore, smetti di inviare" e DC1intendo "ok , continua a inviare ora ".

Anche quella convenzione era già ben stabilita quando Unix stava lasciando il nido ai Bell Labs per uscire nel mondo.

La convenzione è nota come controllo del flusso del software ed è estremamente comune nei dispositivi seriali reali. Non è facile da implementare correttamente, in quanto impedisce l'uso di uno di questi caratteri per qualsiasi altro scopo nel canale di comunicazione e il segnale di Stop deve essere gestito prima di qualsiasi carattere in attesa di ricezione per evitare di inviare più di quanto la fine di ricezione possa maniglia.

Se pratico, l'uso di segnali aggiuntivi fuori banda dal flusso di dati seriali per il controllo del flusso è ampiamente preferito. Su connessioni cablate direttamente che possono permettersi i fili di segnale aggiuntivi, troverai l'uso dell'handshake hardware, che libera quei caratteri per altri usi.

Ovviamente, la finestra del terminale di oggi non utilizza una porta seriale fisica effettiva, ha barre di scorrimento e non ha davvero bisogno dell'handshaking del software. Ma la convenzione persiste.

Ricordo l'affermazione secondo cui Richard Stallman ha ricevuto lamentele sulla sua mappatura Ctrl + S per la ricerca incrementale nelle prime versioni di emacs e che era piuttosto antipatico per qualsiasi utente che dovesse dipendere da una connessione a flusso di software a 7 bit.


2
Grazie ... molto interessante ... Mi chiedevo: perché mai qualcuno dovrebbe scegliere di continuare un processo con "Q" che è comunemente usato (ora) per uscire ... Il raggruppamento QRST lo spiega .....
Peter.O

13
Grazie mille per quel po 'di storia. Recentemente ho disabilitato il controllo del flusso per impostazione predefinita in un emulatore terminale che mantengo, ma ho dovuto ripristinarlo piuttosto rapidamente dopo le proteste vocali dei tradizionalisti di Unix che lo usano ancora. Ho impostato invece il bit ixany, quindi almeno le persone che premono ^ S senza sapere ^ Q non si bloccano.
ak2,

3
@RBerteig Mi sono imbattuto in qualcosa di simile imparando il backspace e l'eliminazione. Backspace è ufficialmente ^ H ed elimina è ^? Alcune persone come gli sviluppatori di Emacs (di nuovo Stallman?) Volevano ^ H disponibile per scopi generali come scorciatoie come Aiuto. La sequenza di escape ^ [[3 ~ o qualcosa del genere è stata creata per sostituire ^? e backspace ora è diventato il vecchio carattere di eliminazione ^ ?. In effetti, ho visto ncurses specificatamente patchato su distribuzioni Linux per rimappare quelle chiavi in ​​terminfo mentre ncurses su FreeBSD non ha patch causando un po 'della fastidiosa confusione che impediva al backspace di non funzionare.
penguin359,

23
Mi chiedevo perché DEL avesse il codice 127 piuttosto che essere raggruppato con gli altri personaggi di controllo, fino a quando non ho giocato per la prima volta con del nastro adesivo e un ASR33. Una volta capito che aveva l'effetto di perforare tutti i buchi, il che significava che poteva essere sovrastato su qualsiasi personaggio precedentemente perforato per eliminarlo, aveva senso.
RBerteig,

3
@SanuelJackson È passato un po 'di tempo da quando ho guardato da vicino, ma il vimrc predefinito fornito con Windows ha mappato <Cs> su ": update" per molti anni. Sono anche abbastanza sicuro di averlo visto in alcune distro per gvim anche in passato. Se si utilizza vim in un terminale, tuttavia, questa cronologia è ancora molto rilevante. I moderni emulatori di terminali implementano ancora i tasti di controllo del flusso, quindi anche se vim li mappasse non li vedrebbe mai a meno che ogni utente non facesse del suo meglio per disabilitare il controllo del flusso come descritto nella risposta accettata.
Estratto il
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.