Linux 组id 会话id 守护进程

Linux 进程组关系

Linux下进程具有强亲缘关系(例如父子进程,子进程的创建,克隆,终止回收,父进程高度参与)。
Linux下采用进程组结构,组织,管理多进程,一个进程组由一个组长进程与若干个组员进程。

进程组的创建:执行程序(./app)系统就会为该进程创建一个进程组,本进程为组长,子进程为组员。
一个进程中组长的唯一标示:pid = gpid (终端输入 ps ajx 查看进程关系)

在这里插入图片描述

pid_t getpgrp(void) // 调用后返回调用进程的组id。

下面展示 调用./app后进程间关系
在这里插入图片描述

进程组的生命周期:直到组中最后一个进程(离开,转移或终止),进程组中没有进程后,内核回收进程组,释放资源及组id。

进程组关系与进程亲缘关系,没有必然联系(组长和组员可能有亲缘关系,但不是必须的)。

转移: 可以通过系统提供的接口,将一个组员进程转移到任意进程组中。

setpgid(pid, gpid);  通过当前进程pid创建组


Linux 进程会话关系

在这里插入图片描述

  1. 当使用终端执行如(./app)的程序时,其实是调用了fork()指令创建了子进程,然后使用execl()拷贝app的用户空间,执行app的功能。
  2. 虽然app进程由终端fork出来,但是并不属于同一个进程组,而是属于同一个会话。
  3. 当执行app程序后使用fork,得到的进程是属于app的子进程,因此拥有与app父相同的gid,此时属于同组进程。
  4. app父进程为终端进程(受控于控制终端,参与终端会话)终端bash结束会直接影响这类终端进程。

会话的唯一标示: pid == gid == sid

**脱离终端控制:**终端进程要摆脱bash的影响,首先要成立新会话,离开现有会话(从而达到脱离终端控制的目的)

pid_t getsid(pid);   // 获取调用进程的会话id
setsid();            // 先为当前进程创建进程组,而后成立新会话


守护进程/精灵进程(系统后台服务进程)

守护进程的生命周期: 相比较于普通进程,生命周期更长,生命周期随操作系统持续(开机启动,关机结束)。
守护进程的核心: 完成系统指定服务,持续运行或周期性运行,保证服务质量,维护系统稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值