
실행하는 동안 실수로 해당 터미널 창에 -를 apt upgrade
보냈습니다 .CtrlS
이제 나는 XOFF
, XON
, Ctrl- Q및 텔레타이프에 대한 새로운 것을 알고 있습니다.
"일시 중지된" 터미널에 Ctrl- 를 보냈을 때 작업을 계속했습니다.Qapt
에 대해 읽으면 에서 무슨 일이 일어났는지 , 또는 를 받는 명령에서 일반적으로 무슨 일이 일어나는지 XOFF
명확하지 않습니다 . 디스플레이 업데이트가 중지됩니다. 알아두면 좋은 정보이지만 여전히 실행 중인가요?apt
XOFF
htop
htop
아직도 달리고 있었나요 apt
? 아니면 효과적으로 일시 중지 apt
되고 htop
정지되었습니까?
분명히 프로세스는 XOFF
'd' 동안에도 여전히 입력을 받을 수 있으므로 여전히 실행 중입니다.
무슨 일이 일어나고 있나요? 예를 들어, 프로그램 카운터는 단순히 프로그램 카운터 증가를 중단하지 않고 프로그램을 정지시킵니다.
XOFF를 처리하도록 명령이 프로그래밍된 방식에 따라 달라집니까? 기본 Linux 명령에서 예상할 수 있는 일반적인 동작이 있습니까?
메모저것이것유사한 질문에는 프로그램 자체에서 무슨 일이 일어나는지 언급하지 않기 때문에 내 질문에 대한 답변이 포함되어 있지 않습니다. 예를 들어, apt
자동으로 계속 실행되었는지, 정지/일시 중지되었는지 알 수 없습니다 .
답변1
이미 알고 있듯이 기본적으로 + 및 + 에 바인딩된 XON
및 는XOFF
CtrlSCtrlQ소프트웨어 흐름 제어캐릭터와 원칙적으로 유물옛날 종이 인쇄 텔레타이프 단말기. 수신 장비(종종 종이 프린터)가 원격 발신자가 보낸 입력을 따라잡지 못하는 경우에 사용되었습니다.
요즘에는 종이 텔레타이프가 더 이상 사용되지 않지만 그 뒤에 숨은 아이디어는 여전히 "터미널"의 소프트웨어 프레임워크에 유지됩니다(예:여기그리고TTY의 역사에 관한 아주 좋은 기사입니다.) 이는 원래의 종이 기반 터미널에서 사용된 개념 중 일부를 상속하고 여전히 구현합니다. 그 중 하나는 흐름 제어 문자를 해석하는 기능입니다.
일반적으로 "콘솔에서" 실행되는 프로그램, 즉 의사 터미널에 연결된 프로그램은 기본적으로 터미널에 잡힌 XON
및 문자를 볼 수 없습니다 . 여기서 표준 동작은 출력 인쇄를 중지하는 것입니다. 프로그램에서 받습니다. 프로그램 자체는 영향을 받지 않고 백그라운드에서 계속 실행되며, 다시 수신될 때까지 출력만 사용자에게 "전송"되지 않습니다 .XOFF
XOFF
XON
프로그램을 작성하고 이러한 입력 문자를 명시적으로 수신하려면 tcsetattr()
프로그램에서 시스템 호출을 사용하여 IXOFF
플래그를 통해 소프트웨어 흐름 제어를 비활성화할 수 있습니다.여기, 예를 들어) -nano
것을 수행, 예를 들어.
답변2
htop
알아두면 좋은 정보이지만htop
[Ctrl-S를 입력한 후에도] 계속 실행되고 있습니까?
네 그럼요. htop
또는 다른 명령은 Ctrl-S로 중지되거나 고정되지 않습니다.
termios IXON
설정은 ISIG
. VSTOP
(Ctrl-S) 또는 (Ctrl-Q) 문자를 입력해도 VSTART
터미널에서 실행 중인 프로세스에 신호가 전송되지 않습니다.
그것을 확인하는 것은 매우 쉽습니다. 두 개의 터미널을 엽니다: 첫 번째 Enter에
tail -f /tmp/file
그리고 두 번째에는
cat > /tmp/file
이제 두 번째 터미널에서 Ctrl-S를 입력한 다음 맹목적으로 줄을 입력하고 Enter를 누르세요. 첫 번째 터미널 화면에 나타납니다. 대신 cat
쉘이고 와 같은 명령인 경우 rm ...
화면에 다시 표시되지 않고 실행됩니다.
XOFF를 수신하는 명령에서 일반적으로 어떤 일이 발생합니까?
명령은 "XOFF를 수신"하지 않습니다. 그것은 모두 터미널 드라이버 내부에서 처리됩니다. 애플리케이션의 관점에서는 아무 일도 일어나지 않습니다. 프로그램이 계속해서 많은 출력을 보내는 경우(또는 ECHO
termios 설정이 기본값으로 설정되어 있고 계속해서 많은 입력을 받는 경우) 터미널에 대한 모든 쓰기(또는 해당 읽기)는 Ctrl-Q가 수신될 때까지 어느 시점에서 차단됩니다.