c/c++语言开发共享如何阻止C中的信号?

我正在尝试创建一个阻止信号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

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐