一般情况下,想要通过终端长时间运行任务,需要使用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查看编号