进程间关系/获取修改进程组ID

本文介绍了进程组的概念,包括进程组ID、组长进程的特点,以及如何通过getpgrp和setpgid函数进行进程组管理和操作。强调了进程组的独有性质,如进程归属和生命周期等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程组, 也称为作业(job),进程组是一个或多个进程的集合

所以每个进程除了有一个进程ID(PID)、父进程ID(PPID)之外,还有一个进程组ID(PGID),PGID用于标识该进程属于哪一个组。所以两个进程的PGID相同,标识它们俩在同一个进程组中

进程组注意事项:

1.每个进程组必定属于某一个进程组,并且只能在一个进程组中

2.每个进程组都有一个组长进程,组长进程的进程ID(PID)就等于该进程组的进程组ID(PGID)

3.只要进程组中还存在至少一个进程,那么该进程组就存在,这与其组长进程是否终止无关,组长进程终止并不能导致进程组终止

4.一个进程组可以包含一个或多个进程,进程组的生命周期从创建开始,直到组内所有进程终止或离开该进程组

5.默认情况下,新创建的进程会继承父进程的进程组ID(PGID),子进程与父进程在同一个进程组中

⚫ 每个进程必定属于某一个进程组、且只能属于一个进程组;

⚫ 每一个进程组有一个组长进程,组长进程的 ID 就等于进程组 ID;

⚫ 在组长进程的 ID 前面加上一个负号即是操作进程组;

⚫ 组长进程不能再创建新的进程组;

⚫ 只要进程组中还存在一个进程,则该进程组就存在,这与其组长进程是否终止无关;

⚫ 一个进程组可以包含一个或多个进程,进程组的生命周期从被创建开始,到其内所有进程终止或离

开该进程组;

⚫ 默认情况下,新创建的进程会继承父进程的进程组 ID。

通过getpgrp()getpgid()函数可以获取进程的进程组ID(PGID)

getpgid()
getpgrp()

#include <unistd.h>

pid_t getpgid(pid_t pid);

pid_t getpgrp(void);

获取对应的进程组ID

通过setpgid()setpgrp()函数可以修改进程所属的进程组(也就是修改进程的PGID)

setpgid()
setpgrp()

#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);

int setpgrp(void);

加入一个现有的进程组或创建一个新的进程组
setpid(pid, pgid):

将参数 pid 指定的进程的进程组 ID 设置为参数 gpid

setpgid(0, pgid) == setpgid(getpgrp(), pgid)

setpgid(pid, 0)   == setpgid(pid, pid)

setpgid(0, 0)      == setpgid(getpgrp(), getpgrp());

一个进程只能修改它自己或者它的子进程所属的进程组,并且子进程在调用exec之后就不能再修改子进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值