linux 后台执行进程

概念:
  • 进程组: 一个或多个进程的集合,每一个进程组都有唯一一个进程组ID,即进程组。
  • 会话器: 一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  • 控制进程: 与控制终端连接的会话期首进程叫做控制进程。


  • PID = 进程ID (由内核根据延迟重用算法生成)

  • PPID = 父进程ID(只能由内核修改)
  • PGID = 进程组ID(子进程、父进程都能修改)
  • SID = 会话ID(进程自身可以修改,但有限制)
  • TPGID= 控制终端进程组ID(由控制终端修改,用于指示当前前台进程组)


  • 会话和进程组的关系:
    每次用户登录终端时会产生一个会话(session)。从用户登录开始到用户退出为止,这段时间内在该终端执行的进程都属于这一个会话。
    每个进程除了有一进程ID之外,还属于一个进程组(Process Group)。进程组是一个或多个进程的集合,每个进程组有一个唯一的进程组ID。多个进程属于进程组的情况是多个进程用管道“|”号连接进行执行。如果在命令行执行单个进程时这个进程组只有这一个进程。


  • 挂断信号(SIGHUP)(默认的动作是终止程序):
    当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。如果会话期首进程终止,则该信号发送到该会话期前台进程组。一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。
    因此当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。


操作:

1.nohup

让提交的命令忽略所有的SIGHUP信号
nohup ping www.baidu.com &


2.setsid

在一个新的会话中运行命令,从而可以避开当前终端发出的SIGHUP信号
setsid ping www.baidu.com


3.&

结合()产生一个新的子shell并用&让这个子shell中将任务放置到后台运行,从而不受当前shell终端的SIGHUP信号影响
(ping www.baidu.com &)


4.disown

使用场景:

如果我们未加任何处理(加 nohup 或者 setsid)就已经提交了命令,可以使用disown补救让它避免 HUP 信号

使用方法:
disown -h jobspec #使某个作业忽略HUP信号
disown -ah #使所有的作业都忽略HUP信号
disown -rh #使正在运行的作业忽略HUP信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值