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中在后台进程中执行程序和杀掉程序
- Linux的后台执行进程之nohup
- Linux 强大的nohup(进程后台执行)
- 使执行的sql语句变为Linux后台进程执行
- linux如何将一个正在运行的进程转入到后台执行
- Linux 强大的nohup(进程后台执行)
- linux中将进程放后台执行
- 让linux程序后台执行(后台程序管理利器supervisior管理Flume进程)
- Linux 强大的nohup(进程后台执行)
- linux如何执行后台进程
- Linux 强大的nohup(进程后台执行)
- Linux 强大的nohup(进程后台执行)
- 使执行的sql语句变为linux后台进程执行
- Linux 强大的nohup(进程后台执行)
- Linux 后台执行 java 进程不挂起
- Linux 技巧:让进程在后台可靠执行的几种方法
- Linux 将进程放入后台执行,解决网络,ssh断开导致进程结束(nohup, setsid, &, disown)
- linux下 让执行的命令行进程在后台运行
- Linux 强大的nohup(后台进程执行)