C ждать сигнала с петлей - PullRequest
       50

C ждать сигнала с петлей

0 голосов
/ 17 октября 2019

В C Linux, есть ли способ подождать сигнала типа SIGUSR1 и SIGUSR2 без петли?

Для примера в этом коде я жду SIGUSR1 или SIGUSR2, чтобы напечатать сообщение, но пока я хочу, я делаю пока 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;
}

Как я могу ждать и ничего не делать (не делать, пока true), пока не придет SIGUSR1 или SIGUSR2?

Например:

#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;
}

1 Ответ

1 голос
/ 17 октября 2019

Существует две возможности:

  • pause() или
  • sigwait()

Документация для pause:

Описание
pause () вызывает вызывающий процесс (или поток) в спящий режим до тех пор, пока не будет доставлен сигнал, который либо завершит процесс, либо вызовет его. функция улавливания.

Источник: https://linux.die.net/man/2/pause


И документация для sigwait:

Описание
Функция sigwait () приостанавливает выполнение вызывающего потока, пока один из сигналов, указанных в наборе наборов сигналов, не станет ожидающим. Функция принимает сигнал (удаляет его из списка ожидающих сигналов) и возвращает номер сигнала в сигн.

Источник: https://linux.die.net/man/3/sigwait

Обе функциисоответствует POSIX.1-2001

...