신호 처리 문제가 있습니다. SIGINT 신호를받는다면 "Recieved Signal"을 출력해야한다고 가정하십시오. 십초 내에 핸들러가 다른 신호를 접수에 경우, 나는이 같은 내 코드를 만든 다음 상태 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);로 변경하여 다른 프로세스도 실행할 기회를 얻으십시오. –