많은 책에서는 신호가 차단되지 않은 경우 신호 생성과 전달 사이에 시간 창이 있다고 말합니다.
그러면 신호가 차단되지 않거나 신호의 생성 및 전달이 원자적 작업인 경우에도 시간 창이 여전히 존재하는지 알고 싶습니다.
시간 창이 여전히 존재하는 경우, 시간 창 동안 다른 신호(생성된 신호와 동일하거나 다른)도 생성되면 어떻게 됩니까?
답변1
귀하의 질문에 대한 일부 답변은 신호 처리기 설정 방법에 따라 다릅니다. 나는 우리가 시스템 호출을 통해 신호 처리기를 설정하는 맥락에서 이것을 보고 있다고 생각합니다 sigaction(2)
.
a의 요소 struct sigaction
이름은 "sa_mask"입니다. 에서 man 2 sigaction
:
sa_mask gives a mask of signals which should be blocked during execution of the
signal handler. In addition, the signal which triggered the handler will be
blocked, unless the SA_NODEFER flag is used.
올바르게 설정하면 처리 중인 신호도 차단되지 않는 것 같습니다. 개인적으로 나는 그 용도를 상상할 수 없지만 내 상상력은 매우 제한되어 있습니다.
그래서 저는 "예, 신호 생성과 수신 프로세스의 신호 처리기 호출 사이에 창이 있습니다"라고 말하고 싶습니다. 따라서 다른 신호가 생성되어 수신 프로세스로 전송될 수 있습니다. 이러한 "다른 신호"에 어떤 일이 발생하는지에 대해서는 신호가 "대기"되지 않은 것처럼 보입니다. 다음을 참조하세요.스택 오버플로 답변,"실시간" 신호 외에도. 즉, 커널이 스택을 수신하면 kill(some_pid, SIGHUP)
로 표시된 프로세스는 some_pid
SIGHUP 신호 핸들러를 한 번 호출합니다.