64-进程组

1. 进程组

  • 概念

在 linux 中,进程不但有自己的 id 号,还会有一个组 id 号。我们把拥有相同组 id 号的进程的集合称为一个进程组。

  • 信号与进程组

使用 kill -n -pgid 可以将信号 n 发送到进程组 pgid 中的所有进程。例如命令 kill -9 -4115 表示杀死进程组 4115 中的所有进程。

  • 进程组的生命期

从被创建开始,到其内所有进程终止或离开该组。

例如,键入命令 cat | cat | cat,这三个 cat 进程就会被归到同一个进程组中。图 1 中的三个 cat 进程同属于一个进程组,它的组 id 号是 4115.


这里写图片描述
图1 进程组(进程名,进程 id 号,进程组 id 号)

  • 进程组组长

进程组组长是进程组中的某一个进程,该进程的进程号等于进程组的进程号。如图 1 中的第一个 cat 进程,它就是进程组的组长。

需要注意的是,进程组可以没有组长。如图 2 中的进程 ps_swing,它的进程组组长 4239 已经被 kill 掉,但是进程组中的其它进程仍然存在。


这里写图片描述

2. 进程组的创建与设置

// 获取进程 pid 的进程组 id.
pid_t getpgid(pid_t pid);

// 指定 pid 为进程组组长或将 pid 加入到组 pgid.
int setpgid(pid_t pid, pid_t pgid);

2.1 新建进程组

将某一个进程指定为组长,就创建了一个新的进程组。相当于调用 setpgid(pid, pid),即将进程 pid 设置为进程组组长,同时创建进程组 pid.

2.2 将进程添加到进程组

将某个进程添加到已存在的进程组,可以使用 setpgid(pid, pgid).

注意:在使用上面的函数时,必须保证调用者进程、被设置的进程以及要添加的进程组属于同一个会话,否则会出现权限错误。在这里,“会话”这个概念可以暂时理解为同一个终端。

这也就是说,倘若你在你的终端中去设置其它终端的进程组,会失败。

3. 总结

  • 理解进程组的概念及相关特性
  • 进程组的生命周期
  • 进程组组长

练习:通常,在终端中运行一个进程,该进程被被默认设置为进程组组长。请使用 setpgid 函数编写程序,当使用终端打开你的程序后,你的进程将自己添加到当前终端 bash 进程所在的组。

提示:命令 ps ajx 可以查看进程的 pid, gid, sid 等相关属性。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值