一般情况下,想要通过终端长时间运行任务,需要使用nohup 或者 screen,如果不使用会怎么样呢?来测试一下
描述:
场景1:ssh登录机器,通过添加(&),启动任务到后台,通过exit命令退出,任务依然存在
场景2:ssh登录机器,通过添加(&),启动任务到后台,直接关闭ssh终端(GUI 直接叉掉窗口),任务终止
测试方法,执行以下命令:
ssh root@DEV_TEST
ping baidu.com 2>&1 1>/dev/null &
exit
执行exit后,进程变成孤儿,但依然存在:
![Linux ssh exit,启动的后台进程不会停止 Linux ssh exit,启动的后台进程不会停止](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TG1OdWFYUmliRzluTG1OdmJTOWliRzluTHpNME1qUTVOaTh5TURFME1URXZNamN4TURFME1EZzJPRFF6T1RVM0xuQnVadz09LmpwZw%3D%3D.jpg?w=700&webp=1)
![Linux ssh exit,启动的后台进程不会停止 Linux ssh exit,启动的后台进程不会停止](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9HdWFuZ3poaS9BcHBEYXRhL0xvY2FsL1lOb3RlL2RhdGEvc2luYTMwMzQ2OTEzMzMvYWIwZTU0ZjU2YjY0NDZiN2EzZTkwOTc2ZTY4MTc0MWEvY2xpcGJvYXJkLnBuZw%3D%3D.png?w=700&webp=1)
原因:
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查看编号