現在停止在 SSH 會話中執行的程序的輸出
問題
我執行通過 SSH 輸出大量資訊的命令。例如,我愚蠢地將調試資訊添加到執行百萬次的循環中,或者只是
cat /dev/urandom
為了踢球而執行。終端充斥著資訊。
我想盡快終止命令並修復我的程序。我不在乎它列印什麼。現在,問題是我盡快按下
Ctrl
+ (在上面的範例中,我在執行命令後立即按下它),但列印所有我什至不需要的資訊仍然需要時間。C
我試過的
我試著按
Ctrl
+C
太用力了,當終端終於趕上時它產生了有趣的結果:OUTPUT HERE^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C ^C^C ^C^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C^C^C^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C rr-@burza:~/xor$ ^C
我還閱讀了關於
Ctrl
+S
這顯然是用來告訴終端“停止輸出,我需要趕上”,但顯然它什麼也沒做。其他細節
我不想改變我執行的命令,這樣我就可以在任何情況下拯救自己,即使我不記得我執行的程序可能會這樣結束。
我的 SSH 客戶端
CYGWIN_NT-6.1-WOW64 luna 1.7.30(0.272/5/3) 2014-05-23 10:36 i686 Cygwin
在 MinTTY 中的 Cygwin() 上執行,終端類型設置為xterm-256color
.SSH 伺服器在 Debian (
Linux burza 3.2.0-4-686-pae #1 SMP Debian 3.2.51-1 i686 i686 i686 GNU/Linux
) 上執行。
其中一些輸出將被緩衝。您將
Ctrl
+發送C
到遠端端,這會中斷正在執行的程序。程序存在,shell 發送字元以再次顯示提示。在顯示提示之前,您的螢幕將首先顯示所有已緩衝且已在發送給您的數據。您要求的是程序停止並且傳輸中的數據以某種方式消失。這不可能發生,因為它已經在途中了。
確保您看不到此數據的唯一方法是在您的終端退出終端,然後重新連接到您的遙控器 - 但這可能比等待緩衝數據顯示要付出更多的努力。
我通常將輸出執行到
less
,以便我可以通過less
使用q
密鑰來殺死它。$ cmd | less
例子
$ cat /dev/urandom | less
點擊
q
+後,Enter
它會退出並返回到您的正常終端,讓它變得乾淨整潔。為什麼會這樣?
您遇到的問題是有緩衝區(用於 STDOUT)與顯示器的輸出一起排隊。這些緩衝區被填得如此之快,以至於您無法以足夠快的速度中斷它以阻止它。
要禁用/限制此效果,您可以禁用 STDOUT 緩衝,這應該會使事情變得更加敏感
stdbuf
,但您可能必須使用這些設置才能以您想要的方式獲得事情。要取消緩衝 STDOUT,您可以使用以下命令:$ stdbuf -o0 <cmd>
stdbuf
有關您可以使用的選項的詳細資訊的手冊頁:If MODE is 'L' the corresponding stream will be line buffered. This option is invalid with standard input. If MODE is '0' the corresponding stream will be unbuffered. Otherwise MODE is a number which may be followed by one of the following: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y. In this case the corresponding stream will be fully buffered with the buffer size set to MODE bytes.
對於緩衝如何工作的一個很好的背景,我強烈建議看看這篇 Pixel Beat 文章標題為:標準流中的緩衝。它甚至包括漂亮的圖片。
參考