我有一个关于处理信号的问题。假设如果我们收到 SIGINT 信号,我们应该打印“Recieved Signal”。如果在十秒内处理程序收到另一个信号,它应该打印“Shutting Down”,然后以状态 1 退出。
我的代码是这样的:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void handler(int);
void secondhandler(int);
void alrmhandler(int);
void alrmhandler (int alrmsig)
{
alarm(0);
}
void secondhandler(int sig)
{
/* after recieving second signal prints shutting down and exit */
printf("Shutting Down\n");
exit(1);
}
void handler ( int sig )
{
/* recieve first SIGINT signal */
printf ("Recieved Signal\n");
/* handle for the alarm function */
signal(SIGALRM, alrmhandler);
/* start 10s alarm */
alarm(10);
/* catch second SIGINT signal within 10s*/
signal(SIGINT, secondhandler);
}
int main( void )
{
signal(SIGINT, handler);
printf( "Hello World!\n" );
for ( ;; )
{
/* infinite loop */
}
return 0;
}
我试图用 dev c++ 编译它,但它失败了。因为 SIGALRM 未声明(在此函数中首次使用)。
无论如何,我想知道的是这段代码是否正确。我实际上有点不确定 alrmhandler()。我应该忽略 SIGALRM 吗?