對訊號(sighup)、作業和控制終端的澄清

對訊號(sighup)、作業和控制終端的澄清

因此,我閱讀了兩種不同的觀點,並試圖找出哪一種是正確的。

1)網路上的一些消息來源說從控制終端發送的訊號僅發送到前台進程組。這意味著,如果希望進程在登出時繼續在背景運行,只需暫停作業 (ctrl-Z) 並在後台恢復它 (bg) 就足夠了。然後你可以註銷,它將繼續運行,因為 SIGHUP 只發送到前台作業。

看:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/

...此外,如果終端讀取任何訊號產生字符,它會向前台進程組產生適當的訊號...

2)其他來源聲稱您需要在程式執行時使用“nohup”命令,或者如果失敗,請在執行期間發出“disown”命令以將其從監聽 SIGHUP 的作業表中刪除。他們說,如果您在登出時不這樣做,您的進程也會退出,即使它在後台進程組中運行。

例如:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm

....如果我無論如何註銷,shell 都會向我的後台作業發送 HUP 訊號...

在我自己對 Ubuntu linux 的實驗中,似乎 1) 是正確的。我執行了一個命令:“sleep 20 &”,然後登出,重新登入並按下“ps aux”。果然睡眠命令仍在運作。

那為什麼這麼多人似乎相信第二點呢?如果您所要做的就是在後台放置一個作業以使其保持運行,為什麼還有這麼多人使用“nohup”和“disown”?

相關內容