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 失败");
        }
    }
}
ABOUT THE AUTHOR

织织

前大厂程序员、AI 工具开发者,正在记录从技术到产品的实践。

关于作者
DISCUSSION

评论与讨论

留下你的想法