Jest to sytuacja, która zdarza mi się dość często: po naciśnięciu (z innym zamiarem) Ctrl-Sw terminalu interakcja (wejście lub wyjście) z nim zostaje zamrożona. Prawdopodobnie jest to rodzaj „blokady przewijania” lub cokolwiek innego.
Jak potem odblokować terminal?
(Tym razem pracowałem z apt-shell
wnętrzem bash
wewnątrz urxvt
- nie jestem pewien, która z nich jest odpowiedzialna za specjalną obsługę Ctrl-S: Przeszukiwałem historię poleceń wstecz C-r, jak zwykle dla readline, ale potem chciałem wrócić „wstecz” "przesuwa historię przez zwykłe - przynajmniej w Emacsie - C-s( 1 , 2 , 3 ), ale to spowodowało zamrożenie terminala. Cóż, przewijanie / stronicowanie, aby zobaczyć przeszłość, nadal działa w terminalu, ale nie ma interakcji z uruchomionymi tam procesami).
vim
i nacisnąłem Ctrl-S, aby zapisać zmiany. Uh-ohXD
Odpowiedzi:
Ctrl-Q
Aby całkowicie to wyłączyć,
stty -ixon
wklej skrypt startowy. Aby zezwolić dowolnemu kluczowi na przywrócenie spraw, użyjstty ixany
.ps: To nie jest terminal ani powłoka, ale robi to sterownik terminala systemu operacyjnego.
źródło
Ctrl-C
; czy to też działa? (A w innym miejscu ,Ctrl-Q
tak jak ty, zasugerowali .)stty
.)Ctrl-S
a następnieCtrl-Q
wznowiła.Ctrl- Qjest rzeczywiście odpowiedzią. Pomyślałem, że wrzucę krótką historię tego, która jest zbyt długa, aby zmieścić się w marginesie poprawnej odpowiedzi ak2 .
W średniowieczu terminal był dużym urządzeniem, które podłączało się do zdalnego urządzenia (pierwotnie innego terminala, ponieważ telegrafy były o wiele łatwiejsze do nauczenia się obsługi niż klucz telegraficzny) za pomocą długiego drutu lub linii telefonicznych z modemami. Do czasu, kiedy Unix się rozwijał, kod ASCII był już dobrze ugruntowany (chociaż konkurencyjny kod EBCDIC od IBM wciąż był siłą, z którą należy się liczyć).
Najwcześniejsze terminale prowadziły drukowany zapis każdej otrzymanej postaci. Tak długo, jak znaki przybywają nie szybciej niż głowica drukująca może je wpisać. Ale gdy tylko możliwe były terminale oparte na CRT, pojawił się problem, że tylko około 25 linii mieści się w CRT, a 25 linii 80 znaków reprezentuje wystarczającą ilość pamięci RAM, że nikt nie myślał poważnie o zapewnieniu większej ilości pamięci RAM dla znaków, które przewinęły się z góry ekran.
Potrzebna była więc pewna konwencja, aby zasygnalizować, że koniec wysyłający powinien zatrzymać się, aby czytelnik mógł nadrobić zaległości.
7-bitowy kod ASCII ma 33 punkty kodowe przeznaczone na znaki kontrolne (od 0 do 31 i 127). Niektóre z nich miały naprawdę dobrze określone cele, takie jak
NUL
(puste lidera Taśma papierowa do gwintowania, luk i spawów),DEL
( „przekreślonego” znaki na taśmie papierowej wskazane przez wbicie wszystkich siedmiu otworów),BEL
(ding!)CR
,LF
OrazTAB
. Jednak cztery zostały wyraźnie zdefiniowane dla sterowania urządzeniem terminala sam (DC1
dlaDC4
aka Ctrl + Q Ctrl-R, Ctrl + S i CTRL + T).Moje przypuszczenie jest takie, że jakiś inżynier pomyślał, że (jak idą mnemoniki), „S” dla „Stop” i „Q” dla „Kontynuuj” nie były takie złe i przypisane
DC3
do oznaczenia „proszę przestać wysyłać” iDC1
oznaczenia „ok , kontynuuj wysyłanie teraz ”.Nawet ta konwencja była już dobrze ustalona, zanim Unix opuszczał gniazdo w Bell Labs, aby wyjść na świat.
Konwencja znana jest jako oprogramowanie do kontroli przepływu i jest niezwykle powszechna w rzeczywistych urządzeniach szeregowych. Nie jest łatwo wdrożyć poprawnie, ponieważ uniemożliwia użycie któregokolwiek z tych znaków w jakimkolwiek innym celu w kanale komunikacyjnym, a sygnał Stop musi być obsługiwany przed wszystkimi oczekującymi odebranymi znakami, aby uniknąć wysyłania więcej niż koniec odbierający może uchwyt.
Jeśli jest to praktyczne, zdecydowanie zaleca się stosowanie dodatkowych sygnałów poza pasmem z szeregowego strumienia danych do kontroli przepływu. W przypadku połączeń bezpośrednio okablowanych, na które można pozwolić sobie na dodatkowe przewody sygnałowe, znajdziesz używany sprzętowy uścisk dłoni, który uwalnia te znaki do innych zastosowań.
Oczywiście dzisiejsze okno terminala nie korzysta z rzeczywistego fizycznego portu szeregowego, ma paski przewijania i tak naprawdę wcale nie wymaga uzgadniania oprogramowania. Ale konwencja trwa.
Przypominam sobie twierdzenie, że Richard Stallman otrzymał skargi dotyczące mapowania Ctrl + S na przyrostowe wyszukiwanie w pierwszych wydaniach emacsa i że był raczej niesympatyczny dla każdego użytkownika, który musiał polegać na 7-bitowym, sterowanym przepływem oprogramowania połączeniu.
źródło