unix环境编程 第九章 9.4进程组&&9.5会话

每个进程除了有一个进程ID之外,还属于一个进程组,每个进程组有唯一一个进程组ID。

函数getpgrp返回调用进程的进程组ID。

#include <unistd.h>
pid_t getpgrp(void);
//返回值:调用进程的进程组ID

函数应用:

#include <unistd.h> 
#include <stdio.h> 
int main() 
{ 
  printf("my gid=%d\n",getpgrp()); 
  return 0;
}

运行结果:my gid=7173

getpgid()用来取得参数pid 指定进程所属的组识别码. 如果参数pid 为0, 则会取得目前进程的组识别码

#include <unistd.h>
pid_t getpgid(pid_t pid);

组长进程

  • 每个进程组可以有个组长进程,组长进程的ID就是进程组的ID
  • 组长进程可以创建进程组以及该组中的进程
  • 进程组的创建从第一个进程(组长进程)加入开始
  • 进程组的组号取第一个加入组的进程(组长进程)编号

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

从进程组创建开始到其中最后一个进程离开为止的时间区间称为进程组的生命周期。

setpgid()将参数pid 指定进程所属的组识别码设为参数pgid 指定的组识别码. 如果参数pid 为0,则会用来设置目前进程的组识别码, 如果参数pgid 为0, 则会以目前进程的进程识别码来取代.

#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
//执行成功则返回组识别码, 如果有错误则返回-1, 错误原因存于errno 中

进程调用setsid函数创建一个会话:

#include <unistd.h>
pid_t setsid(void);
//成功返回进程组ID,失败返回-1
  • 该进程变成新会话的会话首进程,此时,该进程是新会话中的唯一进程。
  • 该进程成为一个新进程组的组长进程。新进程组ID是该调用进程的进程ID。
  • 该进程没有控制终端。如果在调用setsid之前有一个控制终端,那么这种联系也会被切断。

getsid函数返回会话首进程的进程组ID。

#include <unistd.h>
pid_t getsid(pid_t pid);

如果pid是0,getsid返回调用进程会话首进程的进程组ID。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值