종료 호출이 적용되는 것을 방지하기 위한 전략으로 시스템 신호를 가로채기

종료 호출이 적용되는 것을 방지하기 위한 전략으로 시스템 신호를 가로채기

후속 조치로이것질문, (4)(아래 인용)가 내가 도달할 수 있는 가장 먼 거리라는 것이 맞나요?

내 응용 프로그램(systemd 데몬으로 실행되는 .NET 응용 프로그램)에서 kill(sigaction 호출)을 실행할 때 프로세스로 전송되는 커널 신호를 가로채서 kill 요청을 무시합니다.

그리고 고지 사항은 사용자 호출이 kill신호 번호를 생략하거나 포착 가능한 신호(예: 기본 신호 SIGTERM)를 사용하는 경우에만 적용됩니다.
사용자가 SIGKILL(-9) 또는 기타 포착할 수 없는 신호를 사용하여 kill을 호출하는 경우에도 역시 부족합니다.

위의 가정이 정확합니까?

답변1

예, 이는 정상입니다. 많은 프로그램이 자체 신호를 포착하고 처리합니다. 예를 들어, 일반적인 것들은 다음과 같습니다:

  • SIGTERM, SIGINT 및/또는 SIGQUIT를 포착한 다음 열려 있는 모든 파일을 플러시하고 닫습니다. 그렇지 않으면 그냥 죽는 대신 정리하고 우아하게 닫힙니다.
  • SIGHUP을 포착하고 구성 파일을 다시 로드하거나 모든 로그 파일을 닫았다가 다시 엽니다. 또는 SIGHUP을 SIGTERM처럼 처리하세요.
  • 다른 포착 가능한 신호를 적절하게 포착하고 처리합니다. 결국 그것이 바로 실행 중인 프로그램에 신호를 보내는 다른 프로세스를 위한 것입니다. 프로그래머의 요구 사항에 따라 신호 수신 프로세스는 이를 처리하거나 무시합니다(처리되지 않은 경우 SIGTERM으로 종료되는 것과 같은 기본 결과를 생성할 수도 있음).

관련 정보