请问debian下SIGTTIN产生条件的问题

发布于 2022-10-15 07:59:25 字数 1809 浏览 27 评论 0

我准备用一下程序验证后台程序对控制终端失去权限的问题

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文