main
and 에 대해 2개의 신호 처리기를 등록한다고 가정해 보겠습니다 . 런타임 신호가 도착하면 어떻게 되나요?SIGUSR1
SIGUR2
sig_ur1
sig_ur2
SIGUR2
sig_ur1
sig_ur1
실행---> 신호 SIGUR2
도착---->:
sig_ur1
계속 실행 ->sig_ur1
완료 ->sig_ur2
실행 시작 ->sig_ur2
완료 -> 복귀main
sig_ur2
달리기 시작 ->sig_ur2
종료 -> 복귀main
sig_ur2
실행 시작 ->sig_ur2
종료 -> 재개(변수는sig_ur1
종료 시 동일한 값을 유지함) -> 종료 -> 복귀sig_ur1
sig_ur1
main
sig_ur2
실행 시작 ->sig_ur2
종료 ->sig_ur1
재시작(모든 변수가 다시 초기화됨) ->sig_ur1
종료 -> 복귀main
어떤 옵션이 맞나요? 아니면 둘 다 틀렸나요? 이 문제를 다룬 기사/게시물을 찾지 못했기 때문에 관련 자료/링크를 알려주시면 감사하겠습니다. :)
답변1
시나리오 3은 기본적으로 발생합니다. 그러나 SIGUSR1에 대한 핸들러가 실행되는 동안 SIGUSR2를 차단할 수 있으므로 시나리오 1이 발생합니다. 신호 처리기를 설치할 때 신호 처리기가 실행될 때 차단할 신호를 지정할 수 있습니다.
참고로 운영 체제의 맨페이지에서 신호를 읽어보는 것이 좋습니다. 예를 들어, Linux에서는 man 7 signal
"See Also" 매뉴얼 페이지를 볼 수 있습니다.
그러나 동작을 직접 확인할 수는 있습니다. 긴 절전 모드(3)에 들어가는 SIGUSR1에 대한 핸들러를 생성하면 됩니다(SIGALRM을 통해 절전(3)이 가능하므로 Linux에서는 nanosleep(2)이 더 좋습니다). 그런 다음 SIGUSR1이 먼저 전송됩니다. 그리고 SIGUSR2.