控制终端&一个新的会议

时间:2010-12-20 19:01:12

标签: session unix terminal tty

流程(在我的案例中,会话负责人)如何获得控制终端?

我在我的计划中做了什么:

1. fork;
2. parent -> while(1) or smth. similar;
3. child  -> setsid();
             exec "man ps";

我觉得我在输出中什么也得不到。 (孩子是会议的领导者,因此现在它与旧的tty没有关系)但是我得到并且不明白为什么。人ouputs。但不是互动的。当我按下Ctrl-z时,当我按下“q”时它会变成交互式,然后返回我的编程(父级)。所以问题是:

  1. 请解释一下开始时会发生什么(为什么我必须按ctrl-z,在上面阅读)
  2. 为什么man会在那个shell中做一些输出?
  3. 如果没有任何tty连接,人们怎么做呢(我用ps检查过,man和pager在TTY栏中有“?”)
  4. 最后:新会话领导者如何获得控制终端。除open(/dev/tty)以外还有其他方式吗?

1 个答案:

答案 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