gpt4 book ai didi

session - 控制终端和新 session

转载 作者:行者123 更新时间:2023-12-04 06:39:05 25 4
gpt4 key购买 nike

一个进程(在我的例子中 session 负责人)如何获得控制终端?

我在我的程序中做什么:

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

我相信我不会在输出中得到任何东西。 ( child 是 session 负责人,因此现在它与旧 tty 没有关系)但我得到了并且不明白为什么。男人输出。但不是交互式的。当我按下 Ctrl-z 时,当我按下 'q' 时,它会变得交互式并返回到我的 prog(父)。所以问题是:
  • 请解释一开始会发生什么(为什么我必须按 ctrl-z,请阅读上文)
  • 为什么 man 在那个 shell 中有一些输出?
  • 如果没有任何 tty 连接,man 如何做到这一点(我用 ps 检查过,man 和 pager 在 TTY 列中有“?”)
  • 最后:新的 session 领导者如何获得控制终端。除了open(/dev/tty)还有什么办法吗? ?
  • 最佳答案

    Q. 1. 到 3.:即使在 setsid() 之后,子进程仍然可以访问 stdin、stdout 等。您需要明确关闭它们(或使用例如 open("/dev/null",O_RDWR); 重新打开)。

    问题 4:

    When a session-leader without a controlling-terminal opens a terminal-device-file and the flag O_NOCTTY is clear on open, that terminal becomes the controlling-terminal assigned to the session-leader if the terminal is not already assigned to some session



    http://uw714doc.sco.com/en/SDK_sysprog/_The_Controlling-Terminal_and_Pr.html

    关于session - 控制终端和新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4492881/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com