父母调用fork并让孩子创build一个新的会话。 我试图validation孩子不再有控制的终结。
... 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 */
我们知道,应该打印错误信息,但是没有。 我做错什么了吗? 有什么办法可以做到这一点吗? 谢谢。
有一个工作的tty文件描述符并不意味着一个控制终端。 你应该可以通过打开/dev/tty
来测试一个控制的/dev/tty
。 如果你有一个控制的tty, /dev/tty
将作为它的别名。 如果你不这样做,打开它应该失败。
另一个不太方便的方法是读取/proc/self/stat
的第7个字段。