Bash

(sleep 123 &) 是否從 bash 的作業控制中刪除程序組?

  • December 27, 2018

執行以下方式

$ (sleep 123 &)
$ jobs
$ 

sleep 123從 bash 的作業控制中刪除程序組?disown上面的方式和then有什麼區別?請注意,該sleep 123程序仍位於由現在消失的子 shell 領導的同一程序組中,並且與互動式 shell 位於同一程序會話中,因此共享同一個控制終端。

不在 shell 的作業控制中是否解釋了該sleep 123程序不會收到從 bash 程序發送的任何信號(包括 SIGHUP)?

謝謝。

是的,可以這麼說,它刪除了它。

當您(...)從互動式 bash 腳本執行子 shell 時,會創建一個新的程序組(作業),該程序組將成為終端上的前台程序組,並且在子shell 包含任何以 , 終止的命令的情況下&,(例如sleep 3600 &)該命令將在同一個前台程序組中啟動,SIGINT並被SIGQUIT忽略,其輸入重定向自/dev/null)。有關標準的一些連結,請參見此處

(...)子外殼退出時,該前台作業將從外殼的作業表中刪除,並且該sleep 3600命令將繼續在外殼的控制之外執行。

(sleep 3600 &)這與從沒有作業控制的非互動式腳本執行的情況完全不同,在這種情況下,所有內容(主 shell、其(...)子 shell 和任何“後台”命令 ( foo &),在子 shell 內部或外部(...))都在同一個程序組。

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