Session 控制终端&;新的会议

Session 控制终端&;新的会议,session,unix,terminal,tty,Session,Unix,Terminal,Tty,进程(在我的例子中是会话负责人)如何获得控制终端 我在我的程序中所做的: 1. fork; 2. parent -> while(1) or smth. similar; 3. child -> setsid(); exec "man ps"; 我相信我在输出中什么也得不到。(child是一个会议主持人,因此现在它与老tty没有任何关系)但我明白了,也不明白为什么。人的输出。但它不是互动的。当我按下Ctrl-z键时,当我按下“q”键时,它将退出并返回到我

进程(在我的例子中是会话负责人)如何获得控制终端

我在我的程序中所做的:

1. fork;
2. parent -> while(1) or smth. similar;
3. child  -> setsid();
             exec "man ps";
我相信我在输出中什么也得不到。(child是一个会议主持人,因此现在它与老tty没有任何关系)但我明白了,也不明白为什么。人的输出。但它不是互动的。当我按下Ctrl-z键时,当我按下“q”键时,它将退出并返回到我的程序(父级)。因此,问题是:

  • 请解释开始时发生了什么(为什么我必须按ctrl-z,请阅读上文)
  • 为什么人类会在那个外壳里做一些输出
  • 在没有任何tty连接的情况下,人如何做(我用ps检查了它,人和寻呼机在tty列中有“?”)
  • 最后一点:新的会话负责人如何获得控制终端。除了
    打开(/dev/tty)
    ,还有其他方法吗

  • 问题1。to 3.:子进程保持对stdin、stdout等的访问,即使在setsid()之后。您需要显式地关闭它们(或者使用例如
    open(“/dev/null”,O_RDWR);
    重新打开)

    问题4:

    当没有控制终端的会话引导程序打开一个终端设备文件,并且打开时标志O_NOCTTY清除时,如果终端尚未分配给某个会话,则该终端将成为分配给会话引导程序的控制终端