当前位置:嗨网首页>书籍在线阅读

32-与进程组相关的系统调用

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.7.2 与进程组相关的系统调用

setpgid()调用会把pid进程的进程组ID设置为pgid:

246.png 如果pid是0,则使用调用者的当前进程ID。如果pgid是0,则将pid的进程ID设置为进程组ID。

成功时,返回0。成功必须依赖以下几个条件:

  • pid进程必须是调用进程或者是其子进程,而且子进程没有调用过exec函数并且和pid进程在同一个会话中。
  • pid进程不能是会话首进程。
  • 如果pgid已经存在,它必须与调用进程在同一个会话中。
  • pgid必须为非负值。

出错时,返回-1,并把errno设置为下列值之一:

EACCESS pid进程是调用了exec函数的调用进程的子进程。

EINVAL pgid小于0。

EPERM pid进程是会话首进程,或者是与调用进程不在同一个会话中。也可能是试图把一个进程放到不在同一个会话的进程组中。

ESRCH pid不是当前进程、0或当前进程的子进程。

可以通过会话获得进程的进程组ID,虽然这种做法用处不大:

247.png getpgid()返回pid进程的进程组ID。如果pid是0,返回当前进程的进程组ID。出错时,返回-1,并把errno设置成唯一可能值是ERSCH,表示pid是个非法的进程标识符。

与getsid()类似,getpgid()也主要用于诊断错误:

248.png

249.png