Bash
(sleep 123 &)
是否從 bash 的作業控制中刪除程序組?
執行以下方式
$ (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 內部或外部(...)
)都在同一個程序組。