“新会话没有控制终端”是什么意思?

“新会话没有控制终端”是什么意思?

这个参考关于创建新会话说:调用进程是新会话的领导者,新进程组的进程组领导者,并且无控制终端

所以我希望下面的代码不打印任何内容,并且 printf 返回错误(关于没有终端绑定到标准输出的信息),但事实并非如此。它打印在我运行程序的终端上

我有什么错吗?

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void)
{
    if (!fork())
    {
        if (setsid() == -1) // create new session by a child process
            return -1;
        printf("New sesions %d is created\n", getsid(0)); 
    }
    else
        wait(NULL);

    return 0;
}

答案1

我认为这是因为子进程仍然继承文件描述符并stdout指向/dev/pts/1234父进程,所以它也会指向/dev/pts/1234子进程,这就是内核知道发送到哪里的方式stdout,所以它与这里的控制终端无关,如果我理解正确

相关内容