Linux
為什麼有些程序不能在 Linux 終端的後台執行,而其他程序卻可以,儘管都可以列印到終端?
我在 Ubuntu 中使用 Linux 終端。
當我寫
seq 100 1 | less &
在後台執行它時,它就停止了。我也使用其他方式在後台執行它,例如使用,
bg [jobnr]
但它只是停止。我找到了工作編號,然後寫了
bg 1
(當它是 1 時),但是我檢查了這個過程並且它沒有執行。同樣的情況
man pi
也發生在或其他“手冊頁”上。但
pi 10000000
可以在後台執行,完成後它只會在終端上列印 pi 號。這是一項任務,看看是否
less
可以在後台執行,以及為什麼它不能在後台執行。在網上搜尋後,我沒有找到太多關於原因的資訊。為什麼有些程序不能在後台執行,而另一些程序可以在終端上列印,但可以執行?
less
無法在後台執行,因為它試圖與控制終端互動,這導致它被強制停止。只有前台程序可以從終端讀取或更改終端設置。當後台程序試圖更改終端設置時,它會收到一個
SIGTTOU
信號。當它試圖從終端讀取時,它會收到一個SIGTTIN
信號。這兩個信號都會導致它停止。如果一個程序繼續並忽略這些信號,導致它們的操作可能會失敗,所以這不是解決方法(例如,從終端讀取將失敗並出現EIO
錯誤)。筆記:
less
其特殊之處在於,為了能夠用作 ascommand | less
,它直接通過打開控制終端,/dev/tty
而不是像大多數編輯器或 shell 等其他互動式程序那樣假設控制終端是它的標準輸入或標準錯誤。您可以配置您的終端,
stty tostop
以便嘗試寫入控制終端的後台程序也將停止,但這不是任何地方的預設設置,也不是很實用。