栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux 进程可靠运行几种方法

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux 进程可靠运行几种方法

1. 问题分析:
ssh打开终端,执行耗时行为(编译大项目),网络不稳定,需要断开ssh, 关闭ssh终端,最终导致编译终止。

一个shell 为一个会话,一个会话包含多个进程组,一个进程组包含多个进程。
当控制进程失去shell终端时,内核回向其发送SIGHUP信号。
shell收到SIGHUP信号时,会向其创建的前后台进程组发送SIGHUP信号,各个进程收到SIGHUP信号,默认终止任务。

2. 解决方法
2.1 setsid command
setsid 开启新会话,完全不属于shell的会话,故其父进程进程不属于shell了,不会接受shell退出的SIGHUP信号。

实例:

jony@ubuntu:~$ setsid sleep 300 &
[1] 9678 

关闭当前终端,查看进程是否存在:

jony@ubuntu:~$ ps -p 9678 -o cmd,pid,ppid,pgid,sid,etime
CMD                             PID    PPID    PGID     SID     ELAPSED
sleep 300                      9678    1380    9678    9678       01:48

shell 进程 9670:

可以发现 采用sesid的进程的父进程不为shell进程,故程序不受shell退出发送的SIGHUP信号影响。

2.2 nohup command
进程不受SIGHUP信号的影响。

2.3 进程已启动,亡羊补牢
使用 disown 使进程不接收SIGHUP信号。

jony@ubuntu:~$ sleep 300 &
[1] 9702
jony@ubuntu:~$ jobs -l
[1]+  9702 Running                 sleep 300 &
jony@ubuntu:~$ disown %1
jony@ubuntu:~$ jobs -
bash: jobs: -: no such job
jony@ubuntu:~$ exit

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289286.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号