Linux에서 신호는 어떻게 구현됩니까?

Linux에서 신호는 어떻게 구현됩니까?

프로세스가 다른 프로세스에 신호를 보낼 때 수신 프로세스는 실행 일정이 변경될 때까지 기다리나요? 그렇다면 1밀리초마다 프로세스를 실행하기로 선택했다면 신호가 생성된 시점부터 신호가 전달될 때까지의 지연 시간이 약 0.5밀리초라는 뜻일까요? (프로세스가 두 개만 있다고 가정합니다.)
보다 일반적으로 Linux에서는 신호가 어떻게 구현됩니까?

답변1

이것은 (다소) 정의되지 않았습니다.

수신 프로세스가 신호 수신 시 조치를 취하도록 설정된 경우(즉, 신호가 무시되거나 차단되지 않음) 프로세스가 실행 가능해지며 우선순위가 충분하면 즉시 예약되지만 실제로는 실행 가능하지 않습니다. 그래서) 보장됩니다.

답변2

가치를 추측하지 마십시오.

프로세스에 신호를 보내는 것은 해당 프로세스에 이벤트를 대기시키는 것과 같습니다(신뢰할 수 없음). 프로세스 실행 일정이 변경되면 스케줄러는 프로세스의 대기열을 확인하고 수행할 작업을 예약합니다. 문제는 스케줄러가 언제 이 프로세스에 주의를 기울일지 알 수 없다는 것입니다.

그러므로 신호를 사용하는 프로그래머는예측할 수 없고 피할 수 없는신호가 도착하는 시점과 조치가 취해지는 시점 사이의 지연입니다. 그러므로 그 가치를 추측하려고 하지 마십시오.

실시간 신호도 이러한 지연에 도움이 되지 않습니다. 프로세스의 스케줄링 우선순위를 높이는 것이 더 효율적입니다. 그러나 코드가 올바르게 실행되기 위해서는 스케줄러 기능에 의존해서는 안 됩니다.

APUE 10장을 참조하세요.

관련 정보