운영 체제가 종료되면 서비스 관리자는 SIGTERM 및 SIGKILL을 해당 서비스에 보내야 한다는 것을 어떻게 알 수 있습니까?

운영 체제가 종료되면 서비스 관리자는 SIGTERM 및 SIGKILL을 해당 서비스에 보내야 한다는 것을 어떻게 알 수 있습니까?

읽다Stephen의 훌륭한 답변 중 하나,

언제. . . 언제운영 체제SIGTERM프로세스를 닫고 사용하고 종료 SIGKILL하지만 이러한 신호는 커널에서 나오지 않습니다(또는 호출에서 직접 나오지 않습니다).kill()pid가 0이거나 음수 pid이면 커널이 여러 프로세스에 신호를 보내게 됩니다. 그들은 -에서왔다서비스 관리자가 서비스를 종료합니다.그리고로부터시스템 관리 메커니즘의 일부인 다양한 최후의 수단으로 모든 것을 죽이는 응용 프로그램 모드 프로그램: 예를 들어killprocs반 스물 렌베르그(van Smulenberg)의 rc각본, 이것killprocsOpenRC 스크립트,게다가systemd-shutdown프로그램.

운영체제가 종료되면,

  • 서비스 관리자는 서비스를 종료해야 한다는 것을 어떻게 알 수 있나요? 서비스 관리자는 커널이나 일부 프로세스로부터 SIGKILL, SIGTERM 또는 기타 신호를 수신하여 이를 알립니까?

  • 마찬가지로, 시스템 관리 메커니즘의 일부인 다양한 최후의 수단으로 모든 것을 죽이는 응용 프로그램 모드 프로그램이 SIGTERM 및 SIGKILL을 발행해야 한다는 것을 어떻게 알 수 있습니까?

감사해요.

답변1

서비스 관리자는 시스템 관리자가 시스템을 중지하거나 다시 시작하도록 요청했기 때문에 서비스를 종료해야 한다는 것을 알고 있습니다. 관리자가 실행하거나 reboot사용자가 데스크탑 환경에서 적절한 옵션을 선택하면 프로세스가 init다시 시작하라는 메시지가 표시됩니다(현재 커널은 아님). 프로세스는 커널에 실제로 재부팅을 요청하기 전에 init수행하도록 구성된 모든 작업을 처리합니다 .

최후의 수단인 모든 것을 종료하는 단계는 종료 프로세스의 일부입니다. 종료 프로세스에서 실행 중인 모든 서비스를 중지해야 하면 일반적으로 잠시 기다렸다가 나머지 프로세스를 모두 종료합니다.

초기화 시스템마다 이에 대한 구현이 다릅니다. 를 사용하면 sysvinit중지 또는 다시 시작은 먼저 실행이 init적절한 런레벨로 전환되도록 요구하는 런레벨 전환입니다(참조:telinit맨페이지더 알아보기). systemd의 경우 결국 실행되는 대상입니다.systemd-halt서비스.

관련 정보