SIGKILL(및 SIGTERM)을 지정된 프로세스에 명시적으로 보내야 합니까?

SIGKILL(및 SIGTERM)을 지정된 프로세스에 명시적으로 보내야 합니까?

읽다자일스의 대답,

SIGHUP은 심각도 측면에서 SIGTERM과 거의 동일하지만 사용자가 터미널과의 연결을 끊을 때 터미널에서 실행 중인 애플리케이션에 자동으로 전송된다는 점에서 특정한 역할을 합니다(어원적으로 말하면 사용자가 통화 중이기 때문입니다. 모뎀에 연결된 회선이 끊어졌습니다). SIGHUP은 일반적으로 비자발적이며 다음과 관련이 있습니다.SIGTERM은 명시적으로 전송되어야 합니다.이므로 애플리케이션은 SIGHUP에 상태를 저장하려고 시도해야 합니다.

"SIGTERM은 명시적으로 전송되어야 합니다"의 "명시적"은 SIGTERM이 처음에 프로세스(커널이 아닌)에 의한 프로세스 호출을 통해 전송되어야 함을 의미합니까 kill()?

SIGKILL을 지정된 프로세스에 명시적으로 보내야 하는지 궁금합니다. 커널이 암시적으로 SIGKILL 또는 SIGTERM을 프로세스에 보낼 수 있습니까?

운영 체제가 종료되면 커널이 실행 중인 프로세스에 신호를 보내 종료합니까? 무슨 신호인가요? 커널이 암시적으로 이를 전송합니까?

감사해요.

답변1

내가 아는 한, Linux 커널은 SIGTERM자신을 사용자 프로세스로 보내지 않습니다. ( SIGTERM커널 스레드 내부에서 사용: 커널이 커널 스레드에 중지를 요청하는 방식입니다.)

많은 경우 커널은 SIGKILL자체적으로 사용자 프로세스에 메시지를 보냅니다. 예를 들어,OOM 킬러SIGKILL일부 대상을 죽이려면;커널 오류결과적으로 SIGKILL다양한 메모리 오류가 발생할 수 있습니다 SIGKILL.

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

언제. . . 언제핵심종료하거나 다시 시작해도 프로세스에 신경 쓰지 않고 종료하지 않습니다(참조reboot()자세히 알아보십시오. LINUX_REBOOT_CMD_RESTART2시스템 호출 변형을 무시하면 명령 인수를 사용하여 처리할 수 없습니다.

관련 정보