无控制终端、不是会话首进程,printf函数还是能输出。
实验了这样一个例子就是:
一个进程创建一个子进程,然后子进程创建一个新的会话,根据书上说的,新会话无控制终端,然后子进程在创建一个进程,该进程调用printf函数,但是在终端上还是看到了输出。
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(void)
{
pid_t pid=fork();
if(p==0)
{//child
setsid();
p=fork();
if(p==0)
{
printf("session id=%d\n",s);
}else if(p>0)
{
exit(0);
}
}else if(p>0)
{
exit(0);
}else{}//error
return 0;
}
运行结果是:
> ./a.out
session id=3074
------解决方案--------------------0, 1, 2 描述字还是打开的啊,而且是关联的终端,当然还有输出。