【发布时间】:2011-12-01 15:03:37
【问题描述】:
我有一个关于处理信号的问题。 假设如果我们收到 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 吗?
【问题讨论】:
-
将你的 for 循环内容更改为
sleep(1);而不是将其留空,以便其他进程也有机会运行。
标签: c signal-handling