getpgrp函数
pid_t getpgrp(void);
获取当前进程组的id
getpgid
获取指定进程的进程组id
pid_t getpgid(pid_t pid);
成功:返回0,失败:返回-1,设置errno
如果pid = 0,该函数作用和getpgrp一样
setpgid
改变进程默认所属的的进程组,通常加入一个现有的或创建一个新的进程组
int setpgid(pid_t pid,pid_t pgid);
成功:返回0,失败:返回-1,设置errno
如果改变子进程为新的组,应该在fork()之后,exec之前。
创建会话
- 创建一个会话需要注意以下6点注意事项:
1.调用进程不能是进程组组长,该进程变成新会话首进程(session header)
2.该进程成为一个新进程组的组长进程。
3.需有root 权限(ubuntu不需要)
4.新会话丢弃原有的控制终端,该会话没有控制终端
5.该调用进程是组长进程,则出错返回
6.建立新会话时,先调用fork,父进程终止,子进程调用setsid
getsid函数
获取进程所属的会话id
pid_t getsid(pid_t pid);
成功:返回调用进程的会话id,失败:-1,设置errno
pid = 0 时,查看当前进程session id
setsid函数
创建一个会话,以自己的id设置进程组的id,同时也是新会话的id
pid_t setsid(void);
成功:返回调用进程的会话id,失败:返回-1,设置errno
调用setsid函数的进程,既是新的会长,也是新的组长