免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2831 | 回复: 0
打印 上一主题 下一主题

请问debian下SIGTTIN产生条件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-04 00:30 |只看该作者 |倒序浏览
我准备用一下程序验证后台程序对控制终端失去权限的问题

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信号产生的,但是以上程序并没有产生该信号,反而从终端获得了输入!是程序有问题还是我的理解有误??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP