码迷,mamicode.com
首页 > 系统相关 > 详细

进程组ID操作

时间:2015-09-01 10:48:07      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:进程组   会话进程   首进程   setpgid   getpgrp   



进程关系

调用格式
       #include <unistd.h>

       int setpgid(pid_t pid, pid_t pgid); 
       pid_t getpgid(pid_t pid);

       pid_t getpgrp(void);                /* POSIX.1 version */
       pid_t getpgrp(psid_t pid);          /* BSD version */

       int setpgrp(void);                  /* System V version */
       int setpgrp(pid_t pid, pid_t pgid); /* BSD version */
描述:获取、设置一个进程的进程组id。所有这些接口都适用于linux中,不过普遍使用getpgrp来获取进程的组id,使用setpgid()来设置进程的组id


setpgid(pid_t pid, pid_t pgid)函数
pid = 0    设置调用进程的组id
pid > 0    设置指定pid进程的组id为pgid 
pgid = 0   设置置指定pid进程的组id为pid,创建一个进程组,pid进程为组长
如果要把一个进程从进程组A移动到进程组B,A和B必须是在同一个会话中。 


getpgrp(void)函数
返回调用进程的进程组id


getpgid(pid_t pid)函数
pid = 0     返回调用进程的进程组id
pid > 0     返回指定进程的进程组id


setpgrp(void)函数
等同于setpgid(0, 0)
    
setpgrp(pid_t pid, pid_t pgid)函数
等同于setpgid(pid, pgid)


getpgrp(psid_t pid)函数
等同于getpgrp(void)


返回值
 成功setpgid()和setpgrp()返回0,失败返回-1,设置errno
 getpgrp()返回调用进程的组id
 getpgid()和getpgrp(psid_t pid)成功返回进程组id,失败返回-1,设置errno

ERRNO错误定义
 EACCES  企图修改通过execve生成的子进程的进程组id(setpgid(),setpgrp())
 EINVAL  pgid<0(setpgid(), setpgrp())
 EPERM   1.企图把进程移动到另外一个不在同一个会话中的进程组
  2.企图修改调用进程的子进程的进程组,但子进程在另外一个会话中
  3.企图修改会话首进程的进程组id
  (setpgid(), setpgrp())
 ESRCH 1.getpgid()指定pid进程不存在
  2.setpgid()指定pid进程既不是调用进程也不是调用进程的子进程

注意
1.fork的子进程会从父进程继承组id,execve创建的子进程不会继承
2.一个会话可以有一个控制终端。在任何时候,尤其仅有一个会话中的进程组为前台进程组,会话中其他进程组为后台进程组。如果控制终端收到一个信号,信号会发给前台进程组。只有前台

进程组可以获取到该信号。如果后台进程想从控制终端获取信号,那么后台进程组发送SIGTSTP信号吧把前台进程挂起在调用函数tcsetpgrp来控制后台进程组成为前台进程组
3.如果一个会话有控制终端,这个控制终端标志位CLOCAL没有被设置,而且这个终端挂断了,那么会话首进程会发出SIGHUP信号。如果会话首进程终止结束,会发出SIGHUP信号给前台进程组中

的所有进程。
4.setpgid()和getpgrp()也可以用来作业控制
5.如果进程组中一个进程意外退出导致整个进程组成为孤儿进程,而且所有孤儿进程中有个进程结束了,那么信号SIGCONT和SIGHUP会发给每个孤儿进程

版权声明:本文为博主原创文章,未经博主允许不得转载。

进程组ID操作

标签:进程组   会话进程   首进程   setpgid   getpgrp   

原文地址:http://blog.csdn.net/a1009563517/article/details/48153705

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!