绘画创建注意事项:
- 调用进程不能是进程组组长,该进程变成新会话首进程
- 该进程成为一个新进程组的组长进程
- 需要有root权限
- 新绘画丢弃原有的控制终端,该会话没有控制终端
- 该调用进程是组长进程,则出错返回
- 建立新会话时,先调用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);。返回值:成功返回0;失败返回-1,设置errno
调用setsid函数的进程,既是新的会长,也是新的组长
创建会话
1 #include<stdio.h>
2 #include<unistd.h>
3 void main(void)
4 {
5 pid_t pid;
6 pid=fork();
7 if(pid==0){
8 printf("child pid=%d\n",getpid());
9 printf("parent pid=%d\n",getppid());
10 printf("sesson pid=%d\n",getsid(getpid()));
11
12 pid=setsid();//子进程调用setsid创建会话
13
14 printf("child pid=%d\n",getpid());
15 printf("parent pid=%d\n",getppid());
16 printf("sesson pid=%d\n",pid);
17 }
18 while(1);
19 }