apue习题9.2
UNIX环境高级编程第九章有如下一道习题 9.2 编写一段程序调用fork并使子进程建立一个新的会话。验证子进程变成了进程组组长且不再有控制终端。 下边给出博主的解答,仅供参考。
apueunix编程
UNIX环境高级编程第九章有如下一道习题
9.2 编写一段程序调用fork并使子进程建立一个新的会话。验证子进程变成了进程组组长且不再有控制终端。
下边给出博主的解答,仅供参考。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void
main()
{
pid_t pid, sid, gid;
if((pid = fork()) < 0) {
perror("fork error");
} else if (pid > 0) { /*parent*/
if((open("/dev/tty", 0)) == -1) {
perror("没有控制终端,open /dev/tty 失败");
} else {
printf("父进程有控制终端,open /dev/tty 成功\n");
}
exit(0);
} else { /*child*/
if((sid = setsid()) == (pid_t) -1) {
perror("setsid error");
}
if((gid = getpgrp()) == getpid()) {
printf("子进程成为进程组组长\n");
}
//如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件
if((open("/dev/tty", 0)) == -1) {
perror("子进程没有控制终端,open /dev/tty 失败");
}
}
}
评论与讨论
回复 :
留下你的想法