通常狀況下,想要經過終端長時間運行任務,須要使用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查看編號