C等待信号循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C等待信号循环相关的知识,希望对你有一定的参考价值。

在C Linux中,有没有办法等待SIGUSR1SIGUSR2之类的信号而没有循环?

对于此代码中的eaxmple,我等待SIGUSR1SIGUSR2打印消息,但是当我想要的时候,我却是真实的。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void signal_callback_handler(int signum)
{
   printf("Caught signal %d
",signum); 
}

int main()
{
   signal(SIGUSR1, signal_callback_handler);
   signal(SIGUSR2, signal_callback_handler);
   while(1)
   {
      printf("Program processing stuff here.
");
      sleep(1);
   }
   return EXIT_SUCCESS;
}

我如何等待,直到SIGUSR1SIGUSR2到来之前什么也不做(真时不要做?)>

例如:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void signal_callback_handler(int signum)
{
   printf("Caught signal %d
",signum); 
}

int main()
{
   signal(SIGUSR1, signal_callback_handler);
   signal(SIGUSR2, signal_callback_handler);

    printf("this line happned after signal arrived 
 ");
   return EXIT_SUCCESS;
}

在C Linux中,有没有办法等待SIGUSR1和SIGUSR2等信号而没有循环?对于此代码中的eaxmple,我等待SIGUSR1或SIGUSR2打印消息,但是当我想要时,我会在true的同时做。

有两种可能性:
pause()

sigwait()

    pause的文档:
  • Description

  • pause()使调用进程(或线程)进入休眠状态,直到传递了终止该进程或导致该进程的信号。调用信号捕获功能。

来源:https://linux.die.net/man/2/pause以及sigwait的文档:

Description

sigwait()

函数会暂停调用线程的执行,直到信号集中指定的信号之一变为未决状态。该函数接受信号(将其从挂起的信号列表中删除),并以信号形式返回信号编号。

来源:https://linux.die.net/man/3/sigwait两个功能均符合POSIX.1-2001

答案
pause()

以上是关于C等待信号循环的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中的循环中重用条件变量

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

等待来自父母的信号并再次完成工作和阻塞

QEventLoop 仅等待本地事件而不是主循环事件

UDP.5.重叠IO模型:事件通知

C#VS快捷键