美文网首页
linux 后台执行进程

linux 后台执行进程

作者: sssnowyue | 来源:发表于2017-10-04 19:47 被阅读42次

    概念:

    • 进程组: 一个或多个进程的集合,每一个进程组都有唯一一个进程组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信号
    

    相关文章

      网友评论

          本文标题:linux 后台执行进程

          本文链接:https://www.haomeiwen.com/subject/edbcyxtx.html