这个参考关于创建新会话说:调用进程是新会话的领导者,新进程组的进程组领导者,并且无控制终端
所以我希望下面的代码不打印任何内容,并且 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
,所以它与这里的控制终端无关,如果我理解正确