流程(在我的案例中,会话负责人)如何获得控制终端?
我在我的计划中做了什么:
1. fork;
2. parent -> while(1) or smth. similar;
3. child -> setsid();
exec "man ps";
我觉得我在输出中什么也得不到。 (孩子是会议的领导者,因此现在它与旧的tty没有关系)但是我得到并且不明白为什么。人ouputs。但不是互动的。当我按下Ctrl-z时,当我按下“q”时它会变成交互式,然后返回我的编程(父级)。所以问题是:
open(/dev/tty)
以外还有其他方式吗?答案 0 :(得分:3)
Q值。 1.到3:即使在setsid()之后,子进程仍然可以访问stdin,stdout等。您需要明确地关闭它们(或使用例如open("/dev/null",O_RDWR);
重新打开)。
问题4:
当没有控制终端的会话负责人打开终端设备文件且标志O_NOCTTY在打开时清除时,如果终端尚未分配给会话负责人,该终端将成为分配给会话负责人的控制终端一些会议
http://uw714doc.sco.com/en/SDK_sysprog/_The_Controlling-Terminal_and_Pr.html