请问debian下SIGTTIN产生条件的问题
我准备用一下程序验证后台程序对控制终端失去权限的问题
static void sig_tin(int signo)
{
printf("can't catch from stdin!\n");
}
int main(int argc, char *argv[])
{
signal(SIGTTIN, sig_tin);
......
if((pid = fork()) == 0)
{
if(setsid() < 0) //子进程创建新会话,不在属于前台进程组
{
......;
}
if(read(STDIN_FILENO, buf, BUFSIZE) < 0) //尝试从控制终端读,应该失败,但是在运行的过程中却成功获得终端输入
{
......;
}
}
}
这是我在看UNIX环境高级编程的第9章习题最后一道做的解,但是和想象的不一样,按道理说setsid创建会话后,子进程和父进程就不是同一个进程组了,子进程是属于一个新建的后台进程组,后台进程组试图获取控制终端的读是会引起SIGTTIN信号产生的,但是以上程序并没有产生该信号,反而从终端获得了输入!是程序有问题还是我的理解有误??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论