3

父母调用 fork 并让孩子创建一个新会话。我试图验证孩子不再有控制终端。

...

if ((pid = fork()) < 0) {
    perror("fork");
    exit(1);
} else if (pid == 0) {    /* child */
    if (setsid() < 0) {
        perror("setsid");
        exit(1);
    }
    char ch;
    if (read(STDIN_FILENO, &ch, 1) != 1) {
        printf("read error from controlling TTY, errno = %d\n", errno);
    }
    exit(0);
}
...    /* parent */

正如我们所知,应该打印错误消息,但它没有。我做错什么了吗?有没有办法正确地做到这一点?谢谢。

4

1 回答 1

7

拥有一个工作的 tty 文件描述符并不意味着一个控制终端。您应该能够通过打开来测试控制 tty /dev/tty。如果你有一个控制 tty,/dev/tty将作为它的别名。如果你不这样做,打开它应该会失败。

另一种不太便携的方法是读取/proc/self/stat.

于 2013-10-08T13:35:58.747 回答