关于nohup挂起后台进程,断开网络后,后台进程依旧退出的问题

目录 

问题产生:

问题分析:

问题解决


问题产生:

        训练yolov8时,使用nohup python train > result.log 2>&1 &挂起进程,由于本地设备偶尔断网或者设备重启,重新连接后,tail -f result.log 发现进程接收到了signal:1的挂起信号。导致进程退出了。


问题分析:

1.网上搜索:

        该问题困扰了很长时间,因为网上搜索了很多方法都明确表示只要在执行之后增加进程挂起符号&即可(nohup小白可能会遇到),但是显然此次遇到的问题不是在这个地方。

2.尝试通过查看官方文档来解决:

        nohup --help 给出了nohup的官方文档链接:nohup 官方文档,通过查阅文档,文档中明确说明使用了&符号后,确实会忽略到所有的挂起信号,但是也明确说明了是在log out之后(也就是远程的终端应该正常退出)

3.对比分析:

        继续分析问题出现的原因,仔细回想了整个操作流程。大致过程为:首先通过终端使用nohup挂起进程,然后并没有退出当前终端,继续使用tail -f result.log 查看输出;过程中断网了,然后进程就退出了。而问题就出在这个地方,我是继续使用的当前终端,终端退出也是因为网络断开或者设备重启导致的,先前查阅的博客都说断网没有问题,但是都没有说清楚是不是先正常退出了当前终端之后再断开的网络。于是尝试再nohup挂起进程后,先exit退出当前进程,然后断网,重新连接后,发现后台进程的确依然存在。
4.总结:

        分析到这里大致理解了问题的关键所在。个人认为是因为当前终端远程开启的nohup,当前终端没有退出,网络断开或者设备重启(主要还是因为网络断开了),终端异常退出,可能会发送nohup无法拒绝的signal信号或者是nohup自身被kill掉了(个人推测),最终导致挂起失败了。具体的原因感兴趣可以去分析nohup的详细机制,以及终端执行exit的正常退出和网络断开退出的区别(从对比实验来看的确是存在区别的)


问题解决:

执行nohup 挂起进程后,先正常退出当前终端,执行exit即可。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值