프로세스가 중지된 후 신호를 받으면 어떻게 되나요 SIGSTOP
?
나는 이것이 어떻게 처리되는지 이해하고 명확하게 이해하려고 노력하고 있습니다. 불행히도 내가 찾을 수 있는 것은 신호에 대한 간단한 설명뿐이고 특정 사용 사례에 대한 세부 정보는 없습니다.
지금까지 내가 이해한 바는 SIGSTOP
작동하는 동안은 다음과 같습니다.
SIGKILL
프로세스가 즉시 종료됩니다.- 다른 신호는 수집되며
SIGCONT
보류 중인 신호는 해당 순간에 모든 신호가 전송된 것처럼 프로세스에서 해제됩니다. - 일반적으로 ,
SIGCONT
,sa_mask
s 등을 적용한sa_flags
후 집계된 신호를 처리할 때SA_RESTART
예를 들어, SIGSTOP
-> SIGHUP
-> SIGCONT
시퀀스가 존재 하는 경우 after가 수신될 SIGHUP
때까지 처리가 보류됩니다 SIGCONT
.
이것이 맞는지 잘 모르겠습니다.
나는 아직 이 사건들에 대해 아는 바가 없습니다:
신호가 수집되는 순서가 아직도 헷갈립니다.
예:
SIGSTOP
->SIGHUP
->SIGTERM
->SIGCONT
: 합계가 수신된 순서대로 처리됩니까SIGHUP
, 아니면 임의의 순서로 처리됩니까?SIGTERM
SIGSTOP
유효기간 동안 동일한 신호가 여러 번 수신되면 어떻게 되나요?SIGSTOP
->SIGHUP
->SIGHUP
->SIGCONT
SIGSTOP
실행 중인 신호 처리기를 중단 합니까 ? 신호가 처리 대기 중인 경우 나중에까지 지속됩니까SIGCONT
?
이러한 유사한 질문에 대한 답변에서 몇 가지 답변을 찾았지만 위 사항에 대해서는 여전히 명확하지 않습니다.
답변1
SIGSTOP
"작동"하는 것이 아닙니다. 신호가 전달된 다음 프로세스가 중지됩니다. 이 상태가 유효한 상태입니다. 이 상태의 프로세스에 대해 일부 신호가 생성되면 일시 중단됩니다. 중지된 프로세스에는 신호를 전달할 수 없습니다. 프로세스가 다시 실행되면 신호 프로세스 마스크에 따라 처리되고 처리됩니다. 신호를 무시합니다.
지정된 순서가 확실하지 않습니다. 실시간 신호만이 안정적인 대기열 속성을 갖습니다. 예를 들어, POSIX에는 "호출 후에 보류 중인 차단 해제 신호가 있는 경우 sigprocmask()
sigprocmask() 호출이 반환되기 전에 이러한 신호 중 최소한 하나가 전달되어야 합니다."라는 문구가 포함되어 있습니다. 어느 것이 먼저 전송되는지는 지정하지 않습니다.
물론 몇 가지 특별한 동작이 있습니다. SIGSTOP에 의해 중지된다고 해서 SIGKILL에 의해 종료되는 것을 방지할 수는 없습니다.