한 신호 처리기가 다른 신호 처리기에 의해 중단될 때 두 개(≥2) 개의 신호 처리기 실행 순서는 무엇입니까?

한 신호 처리기가 다른 신호 처리기에 의해 중단될 때 두 개(≥2) 개의 신호 처리기 실행 순서는 무엇입니까?

mainand 에 대해 2개의 신호 처리기를 등록한다고 가정해 보겠습니다 . 런타임 신호가 도착하면 어떻게 되나요?SIGUSR1SIGUR2sig_ur1sig_ur2SIGUR2sig_ur1

sig_ur1실행---> 신호 SIGUR2도착---->:

  1. sig_ur1계속 실행 -> sig_ur1완료 -> sig_ur2실행 시작 -> sig_ur2완료 -> 복귀main

  2. sig_ur2달리기 시작 -> sig_ur2종료 -> 복귀main

  3. sig_ur2실행 시작 -> sig_ur2종료 -> 재개(변수는 sig_ur1종료 시 동일한 값을 유지함) -> 종료 -> 복귀sig_ur1sig_ur1main

  4. 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.

관련 정보