gpt4 book ai didi

c - Bug shell sigset_t

转载 作者:行者123 更新时间:2023-11-30 16:33:30 26 4
gpt4 key购买 nike

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 程序。我已经完成了项目的第一部分,即管道、 fork 、exec、I/O 文件的使用。现在我正在破坏我的项目以查找错误,并且我带来了这个对我来说变得非常烦人的项目,因为我找不到解决方案。抱歉,我不能在这里发布我的所有代码,因为它可能会被我的同学复制。

看看上面的代码,如果我执行我的程序并在执行开始时发送 CTRL Z 和 CTRL C,而不插入任何命令,我的处理程序将进入操作状态,表示程序不能暂停或暂停,如果我写一个新命令是这样的“sleep 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);

关于c - Bug shell sigset_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com