Ctrl-S / XOFF 對進程的影響

Ctrl-S / XOFF 對進程的影響

當我運行時,apt upgrade我不小心向該終端視窗發送了一個Ctrl- 。S

現在我知道了XOFF,,XON- ,以及一些關於電傳打字機的新東西CtrlQ

當我向“暫停”終端發送一個Ctrl-時,繼續其工作。Qapt

透過閱讀XOFF,我不清楚apt在接收到 的任何命令中發生了什麼,或者通常會發生什麼XOFFhtop停止更新顯示,這是一件好事,但仍在htop運行?

還在apt跑嗎?還是實際上被apt暫停htop、凍結了?

顯然,進程仍然可以接收輸入,而XOFF'd,因此它們仍在執行。

怎麼了?例如,程式計數器,顯然它並不是簡單地停止增加程式計數器、凍結程式。

它是否取決於命令如何編程來處理 XOFF?基本 Linux 指令是否存在可以預期的一般行為?

筆記類似的問題不包含我的問題的答案,因為它們沒有提到程式本身發生的情況。例如,我不知道是否apt繼續默默運行,或者是否被凍結/暫停。

答案1

您可能已經知道,XONXOFF,預設情況下綁定到Ctrl+SCtrl+ Q,是軟體流量控制人物和原則上的遺物紙質印刷電傳終端的舊時代。當接收裝置(通常是紙本印表機)有時無法跟上遠端發送器發送的輸入時,就會使用它們。

如今,紙質電傳打字機已不再使用,但背後的想法仍保留在「終端」的軟體框架中(參見例如這裡這篇關於 TTY 歷史的非常好的文章),它繼承並仍然實現了原始紙質終端中使用的一些概念 - 其中之一是解釋流量控製字元的能力。

通常,「在控制台上」運行的程式(即連接到偽終端)不會看到XONXOFF字符,因為它們默認由終端捕獲,其中標準行為XOFF是停止列印輸出從程式接收。程式本身不受影響,並繼續在後台運行,只是輸出不會「轉發」給用戶,直到XON再次收到。

如果您編寫程式並希望明確接收這些輸入字符,則可以tcsetattr()在程式中使用系統呼叫透過標誌停用軟體流控制IXOFF(請參閱在這裡,例如)--nano這樣做, 例如。

答案2

htop停止更新顯示,這是值得知道的事情,但htop仍在運行[輸入 Ctrl-S 後​​]?

是的,一點沒錯。htop或其他指令不會被 Ctrl-S 停止或凍結。

termiosIXON設定不像ISIG.鍵入VSTOP(Ctrl-S) 或VSTART(Ctrl-Q) 字元不會向終端機中執行的程序發送任何訊號。

檢查起來很容易;打開兩個終端:在第一個輸入

tail -f /tmp/file

在第二個

cat > /tmp/file

現在,在第二個終端機中鍵入 Ctrl-S,然後繼續盲目地鍵入行,然後按 Enter。它們將出現在第一個終端的螢幕上。如果不是catshell 並且這些命令是類似 的命令rm ...,那麼它們將運行而無需在螢幕上回顯。

在接收到 XOFF 的任何命令中通常會發生什麼。

該命令不“接收 XOFF”。這一切都在終端驅動程式內部處理。從應用程式的角度來看,什麼也沒有發生。如果程式不斷發送大量輸出(或ECHOtermios 設定處於預設狀態,並且它不斷接收大量輸入),則任何對終端的寫入(或相應的讀取)都會在某個時刻被阻止,直到收到Ctrl-Q 。

相關內容