您的位置:首页 > 运维架构 > Linux

linux 后台执行进程

2017-10-04 19:44 239 查看

概念:

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