【问题标题】:How a session leader can take the control of tty in Linux?会话负责人如何控制 Linux 中的 tty?
【发布时间】:2013-12-26 13:11:53
【问题描述】:

我试图守护进程,发现我们应该 fork() 两次。原因是如果进程是会话领导者,那么它可以控制 tty。我想知道,这个理论背后的基本原理是什么。

【问题讨论】:

    标签: linux


    【解决方案1】:

    第一个分支是在单独的会话中运行守护进程。您应该为守护进程做的是(伪代码):

    fork()
    if (parent) {
        return
    else if (child) {
        setsid();
        closefds();
        fork();
        if (child) {
            childwork();
        } else {
            exit(0);
        }
    }
    

    setsid 调用将守护进程置于其自己的会话中,并将其与父进程的 tty 解除关联。如果您不进行setsid 调用,那么您将不会获得新会话,并且守护进程可能会受到它仍然属于的进程组的干扰 - 即它可能会受到HUP 发送的干扰到整个进程组。

    第二个fork() 调用导致进程不再是会话领导者。这意味着如果进程打开一个未使用的终端设备(偶然或有意),它将无法获得控制终端,因为它不是会话领导者。如果它仍然是会话负责人,那么您必须确保所有打开终端设备的打开调用都必须使用 O_NOCTTY 调用以确保安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多