在C Linux中,是否有一种无需循环等待信号SIGUSR1
和SIGUSR2
的方式?
例如,在这段代码中,我等待SIGUSR1
或SIGUSR2
来打印消息,但我只能使用while 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;
}
我该如何等待并且不执行任何操作(不使用while 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;
}
select()
。这是我脑海中的第一反应,因为我知道select()
可能会永久阻塞。select(2)
- Iharob Al Asimiprintf
。 - user10678532