Linux

為什麼有些程序不能在 Linux 終端的後台執行,而其他程序卻可以,儘管都可以列印到終端?

  • September 28, 2020

我在 Ubuntu 中使用 Linux 終端。

當我寫seq 100 1 | less &在後台執行它時,它就停止了。

我也使用其他方式在後台執行它,例如使用,bg [jobnr]但它只是停止。

我找到了工作編號,然後寫了bg 1(當它是 1 時),但是我檢查了這個過程並且它沒有執行。

同樣的情況man pi也發生在或其他“手冊頁”上。

pi 10000000可以在後台執行,完成後它只會在終端上列印 pi 號。

這是一項任務,看看是否less可以在後台執行,以及為什麼它不能在後台執行。在網上搜尋後,我沒有找到太多關於原因的資訊。

為什麼有些程序不能在後台執行,而另一些程序可以在終端上列印,但可以執行?

less無法在後台執行,因為它試圖與控制終端互動,這導致它被強制停止。只有前台程序可以從終端讀取或更改終端設置。

當後台程序試圖更改終端設置時,它會收到一個SIGTTOU信號。當它試圖從終端讀取時,它會收到一個SIGTTIN信號。這兩個信號都會導致它停止。如果一個程序繼續並忽略這些信號,導致它們的操作可能會失敗,所以這不是解決方法(例如,從終端讀取將失敗並出現EIO錯誤)。

筆記:

less其特殊之處在於,為了能夠用作 as command | less,它直接通過打開控制終端,/dev/tty而不是像大多數編輯器或 shell 等其他互動式程序那樣假設控制終端是它的標準輸入或標準錯誤。

您可以配置您的終端,stty tostop以便嘗試寫入控制終端的後台程序也將停止,但這不是任何地方的預設設置,也不是很實用。

引用自:https://unix.stackexchange.com/questions/609859