我正在尝试创建一个阻止信号SIGUSR1的程序,它会解锁信号。 在中间,我想看到使用sigpending
阻止信号。 但它总是说信号没有被阻挡,我可以在信号被阻挡时使用它。 这是我的代码。
#include #include #include static void signals(int signaln) { switch (signaln) { case SIGUSR1: printf("Signal SIGUSR1n"); break; } return; } main() { sigset_t set,set2; struct sigaction sigs; sigs.sa_handler = signals; sigemptyset(&sigs.sa_mask); sigs.sa_flags=SA_ONESHOT; sigaction(SIGUSR1, &sigs,0); sigemptyset(&set); sigemptyset(&set2); sigaddset(&set,SIGUSR1); if(sigprocmask(SIG_BLOCK, &set, NULL)==0){ printf("Blocking SISGUSR1...n"); } sigpending(&set2); if (sigismember(&set2,SIGUSR1)==1) { printf("The signal is blockedn"); //it should print this } wait(2); kill(getpid(),SIGUSR1); //the signal shouldn't work wait(2); if(sigprocmask(SIG_UNBLOCK, &set, NULL)==0){ printf("Unblocking SIGUSR1n"); } }
谁能帮助我?
sigpending
不会告诉您信号是否被阻止。 它告诉您信号是否等待传递。 (即信号被阻止,一个信号被发送。)
此外,阻止不会导致信号无法传递; 这意味着现在不会传递信号。 因此,您可以发送信号,并在信号解除阻塞后立即发送; 可能在调用sigprocmask(SIGUNBLOCKED...)
但在调用printf
之前,所以在看到“解锁”消息之前,您可能会看到收到信号的消息。
以上就是c/c++开发分享如何阻止C中的信号?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/550032.html