[질문] sigaction 과 pause 사용에 문제가 생겼습니다.

s97083의 이미지

안녕하세요
코드 참고해서 수정을 좀하고 있는데 아래와 같이 핸들러를 등록하고..

act.sa_handler = sighandler;
act.sa_flags = SA_RESTART;//0;
sigemptyset(&act.sa_mask);
sigaddset( &sigset, SIGUSR2);
sigaction(SIGUSR2, &act, NULL);
중간에 pause를 호출 했습니다.
while(run_flg) { <-- 전역 변수...
pause();
}

그리고 호출되는 sig 함수에 while 문의 탈출 조건을 걸었습니다.
void sighandler(int signo)
{
run_flg = 0;
}
signal 호출은 raise(SIGUSR2); 함수로 처리했습니다.
문제는 pause까지 간 이후에 시그널을 받아도 pause 이후 부분부터 다시 시작하지를 않고요.
그냥 시그널만 받는 부분만 살아있습니다.

pause 부분부터 다시 시작하게 할 방법이 없을까요?
읽어주셔서 감사합니다.

neogeo의 이미지

sigwait을 사용하시는게 좋아보입니다.

단 이 경우 sighandler 는 사용할 수 없게 됩니다.

Neogeo - Future is Now.

s97083의 이미지

답변 주셔서 감사합니다. 테스트를 해보고 싶은데
sigwait()를 pause 대신에 그대로 호출해 주면 될까요?

neogeo의 이미지

man sigwait

Neogeo - Future is Now.