Linux 프로그래밍 인터페이스는 다음과 같이 말합니다.
TASK_KILLABLE: 이 상태는 TASK_UNINTERRUPTIBLE과 유사하지만 다음과 같은 경우 프로세스를 깨웁니다.치명적인 신호(즉, 프로세스를 종료하는 것)이 수신됩니다. 이 상태를 사용하도록 커널 코드의 관련 부분을 전환하면 중단된 프로세스에서 시스템을 다시 시작해야 하는 다양한 상황을 피할 수 있습니다. 대신 치명적인 신호를 보내 프로세스를 종료할 수 있습니다. TASK_KILLABLE을 사용하기 위해 변환할 첫 번째 커널 코드 부분은 NFS입니다.
치명적인 신호는 TASK_KILLABLE 상태의 프로세스를 깨울 수 있지만 TASK_UNINTERRUPTIBLE 상태의 프로세스는 깨울 수 없습니다.
치명적인 신호는 SIGKILL만 의미합니까, 아니면 SIGTERM, SIGHUP, SIGQUIT, SIGINT 또는...도 의미합니까?
답변1
대부분의 신호는 기본적으로 치명적입니다. 어떤 신호라도목록기본 작업 "종료" 또는 "코어 덤프"는 무시하거나 명시적으로 처리하지 않는 한 치명적입니다. 여기에는 SIGUSR1
물론 과 같은 "양성" 신호가 포함됩니다.SIGKILL
SIGTERM
이는 Linux 커널과 일치합니다.정의치명적인 신호의 경우:
- 이는 커널의 관점에서 무시되는 신호 중 하나이거나 중지 신호 중 하나일 수 없습니다.즉각기
SIGCONT
,SIGCHLD
,SIGWINCH
, 그리고SIGURG
한편으로는, 그리고SIGSTOP
,SIGTSTP
,SIGTTIN
, 그리고SIGTTOU
한편으로는; - 해당 신호 처리기는 기본 처리기여야 합니다.
따라서 치명적인 신호로 인해 프로세스가 종료됩니다(실행 중인 프로그램에서 지정한 핸들러를 통하지 않음).