c - 错误外壳sigset_t


sigset_t new,old;

sigemptyset(&new);
sigaddset(&new, SIGINT); 
sigaddset(&new, SIGTSTP);
sigprocmask(SIG_BLOCK, &new, &old);
//Before son
(exec,(other stuff...))
// ON Father
sigprocmask(SIG_UNBLOCK, &new, &old);
sigprocmask(SIG_SETMASK, &old, NULL); 

我正在做一个项目,就是这个,一个shell程序。我已经完成了项目的第一部分,即使用管道,叉子,exec,I/O文件。现在我为了找到错误而崩溃了我的项目,我带来了这个对我来说变得非常烦人的项目,因为我找不到解决方案。抱歉,我不能在这里发布我的所有代码,因为它可能被我的同学复制。

查看上面的代码,如果我执行我的程序并向 CTRL Z 和 CTRL C 发送垃圾邮件,就在执行开始时没有插入任何命令,我的处理程序将进入操作,说程序无法暂停或暂停,如果我编写一个新命令是这个,"睡眠 5",然后再次发送垃圾邮件, 由于sigset_t,它处于"忽略"状态,命令完成后它会给我处理程序的消息,因为"Sleep 5"会暂停所有内容,并且正在等待我插入新命令,如果我再次发送垃圾邮件,我的处理程序在应该发出任何消息时不会发出任何消息。就像我添加的信号仍然被阻止一样。SIG_UNBLOCK是解锁我添加的整组信号还是只解锁一个信号集?

@Stargateur找到了我问题的根源。

正确的代码是:

sigset_t new,old;

sigemptyset(&new);
sigaddset(&new, SIGINT); 
sigaddset(&new, SIGTSTP);
sigprocmask(SIG_BLOCK, &new, &old);
//Before son
(exec,(other stuff...))
// ON Father
sigprocmask(SIG_UNBLOCK, &new, &old);

最新更新