[实践OK]Linux ssh exit,启动的后台进程不会停止,&退出终端后依旧会退出的原因之shopt|grep hup。

jackxiang 2019-3-18 15:00 | |
shopt|grep hup





OneSwoole的测试,发现退出终端后依然运行的原因是huponexit off:
shopt|grep hup
huponexit       on




为On后还是会是这样一种结构,估计是swoole强制屏蔽了sighup的信号:



#shopt -s huponexit
#shopt|grep hup
huponexit       on
退了终端后:




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

来自:https://www.cnblogs.com/ziziwu/p/4125750.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/10124/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2019-4-9 11:32
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]