我對處理信號有疑問。 假設如果我們收到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);而不是將其設置爲空,以便其他進程也有機會運行。 –