验证进程的方法不再具有控制终端

时间:2013-10-08 13:09:07

标签: c linux

父级调用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 */

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

1 个答案:

答案 0 :(得分:6)

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

另一种不那么便携的方法是读取/proc/self/stat中的第7个字段。