C 用循环等待信号

joi*_*doi 5 c linux signals signal-handling

在C Linux中,有没有办法像等待信号一样SIGUSR1并且SIGUSR2不循环?

例如,在这段代码中,我等待SIGUSR1SIGUSR2打印消息,但是当我想要时,我会在 true 时执行......

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

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

int main()
{
   signal(SIGUSR1, signal_callback_handler);
   signal(SIGUSR2, signal_callback_handler);
   while(1)
   {
      printf("Program processing stuff here.\n");
      sleep(1);
   }
   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我如何才能等待并且不做任何事情(在 true 时不做)直到SIGUSR1SIGUSR2到达?

例如 :

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

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

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

    printf("this line happned after signal arrived \n ");
   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

有两种可能:

  • pause()或者
  • sigwait()

文档pause

描述
pause()导致调用进程(或线程)休眠,直到传递信号终止进程或导致调用信号捕获函数。

来源:https: //linux.die.net/man/2/pause


以及以下文档sigwait

说明
sigwait ()函数挂起调用线程的执行,直到信号集中指定的信号之一变为挂起状态。该函数接受信号(将其从待处理信号列表中删除),并以 sig 形式返回信号编号。

来源: https: //linux.die.net/man/3/sigwait

两个函数均符合POSIX.1-2001