我对处理信号有疑问。 假设如果我们收到SIGINT信号,我们应该打印“Recieved Signal”。如果10秒内处理临危另一个信号,它应打印“关机”,然后用状态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;
}
我试图与开发的C编译它++,但失败了。由于SIGALRM未声明(首次在此函数中使用)。
无论如何,我想知道的是,如果这段代码是正确的。我实际上有点不确定alrmhandler()。我应该忽略SIGALRM吗?
将您的for循环内容更改为sleep(1);而不是将其设置为空,以便其他进程也有机会运行。 –