1
이 프로그램을 작성하여 SIGQUIT 신호 차단을 확인했습니다. 문제는 이전 상태로 복원 한 후 신호가 보류 중이지만 전달되지 않는 것입니다.보류중인 신호가 전달되지 않음
다음은 메인 프로그램
sigset_t newmask, oldmask, pendmask;
if(signal(SIGQUIT,sig_quit)==SIG_ERR) //Register signal handler
printf("\nerror\n");
sigemptyset(&newmask);
sigaddset(&newmask,SIGQUIT);
sigprocmask(SIG_BLOCK,&newmask,&oldmask); //Save previous value and block SIGQUIT
sleep(5);
sigpending(&pendmask);
if(sigismember(&pendmask,SIGQUIT)){ //Check if SIGQUIT is pending
printf("\nSIGQUIT pending..\n");
fflush(stdout);
}
sigprocmask(SIG_BLOCK,&oldmask,NULL); //Restore old value of sigset
printf("\nSIGQUIT unblocked\n");
fflush(stdout);
sleep(5); //Sleep again to check if everything is A-okay!
내가 처음 수면에 신호가 차단되는 것을 이해할 수에게 있습니다. 그러나 차단 해제 후에도 두 번째 절전 모드에서는 프로그램이 SIGQUIT에 응답하지 않습니다.
여기에 가능한 문제가 있습니까? 내가 여기
가상 코어
사용하고PS는 SIGQUIT
차단을 해제하지 않기 때문에 당신은 당신이 생각하는 경우의 핸들러 함수
void sig_quit(int i)
{
printf("\nSIGQUIT caught\n");
fflush(stdout);
signal(SIGQUIT,SIG_DFL);
}
감사합니다. 나는 그 성명을 간과했다! –