一般情況下,想要通過終端長時間運行任務,需要使用nohup 或者 screen,如果不使用會怎么樣呢?來測試一下
描述:
場景1:ssh登錄機器,通過添加(&),啟動任務到后台,通過exit命令退出,任務依然存在
場景2:ssh登錄機器,通過添加(&),啟動任務到后台,直接關閉ssh終端(GUI 直接叉掉窗口),任務終止
測試方法,執行以下命令:
ssh root@DEV_TEST
ping baidu.com 2>&1 1>/dev/null &
exit
執行exit后,進程變成孤兒,但依然存在:
原因:
bash有如下配置項,默認關閉(通過命令:shopt 查看):
huponexit off
當huponexit 為off時,exit時不會向終端所屬任務發SIGHUP信號,激活該選項:
shopt -s huponexit
重復進行上述測試,exit時后台進程退出
ps:
可以使用disown, 、對任務屏蔽SIGHUP信號,這樣,即使強制關閉終端(或者huponexit開啟時exit),任務也不會停止
示例:
ssh root@DEV_TEST
ping baidu.com 2>&1 1>/dev/null &
disown -h %1
此時強制斷開終端(kill 終端進程),進程依舊存在
需要注意,disown后面要加job的編號,如果只有一個job,可以不提供,否則用jobs查看編號
