덜 폭력적인 킬 신호 -HUP (1) -INT (2)와 -TERM (15)의 차이점


32

가장 폭력적인 kill -9(SIGKILL) 외에도 3 가지 다른 공통 신호 ( here ) -HUP(1), -INT(2) 및 -TERM(15) 의 차이점을 이해하지 못합니다 .

어떤 시나리오에서 하나는 작동하고 다른 시나리오는 작동하지 않습니까?

일반적으로 -9( -KILL) 는 언제 실패합니까?

나를 위해, 그들은 종료 과정을 요구하는 것 우아하게 , 저장하지 않고 . 가혹함을 평가, 나는 넣어 것 -HUP < -TERM < -INT < -KILL입니다.


HUP반드시 프로그램이 종료된다는 의미는 아닙니다. 일부 프로그램은 SIGHUP구성 파일을 다시로드 하는 데 사용 됩니다. SIGKILL프로세스가 인터럽트 불가능한 휴면 상태 일 때 실패하거나 연기됩니다 .
muru

답변:


52

SIGKILL 은 실행중인 프로세스를 죽이는 데 결코 실패하지 않습니다 . 애플리케이션에 반응 할 수있는 다른 신호가 존재합니다.

SIGINT, SIGTERM, SIGQUIT 및 SIGHUP의 기본 동작은 프로그램을 종료하는 것입니다. 그러나 애플리케이션은 이러한 신호에 대한 핸들러를 설치할 수 있습니다. 따라서 이러한 신호를 수신 할 때 응용 프로그램의 실제 동작은 시스템 설계가 아니라 규칙 (각 응용 프로그램이 따르거나 따르지 않을 수 있음)의 문제입니다.

SIGINT는 로트의 "가장 약한"것입니다. 일반적인 의미는 "현재하고있는 작업을 중지하고 추가 사용자 입력을 기다립니다"입니다. 터미널에서 Ctrl+ C로 생성 된 신호 입니다. 비 대화식 프로그램은 일반적으로 SIGTERM과 같이 처리합니다.

SIGTERM은 "정상"킬 신호입니다. 응용 프로그램이 깨끗하게 종료되도록 지시합니다. 응용 프로그램은 상태를 저장하고 그렇지 않은 경우 임시 파일과 같은 리소스를 비우는 데 시간이 걸릴 수 있습니다. 중요한 응용 프로그램 중에 중단하지 않으려는 응용 프로그램은 잠시 동안 SIGTERM을 무시할 수 있습니다.

SIGHUP은 가혹 성 측면에서 SIGTERM과 거의 동일하지만 사용자가 해당 터미널에서 연결을 끊을 때 (비교적으로 전화선과 모뎀을 통해 연결했기 때문에) 터미널에서 실행되는 응용 프로그램으로 자동 전송되기 때문에 특정 역할이 있습니다. 전화를 끊다). SIGHUP은 명시 적으로 전송해야하는 SIGTERM과 달리 비자발적 인 경우가 많으므로 응용 프로그램은 SIGHUP에 상태를 저장해야합니다. SIGHUP은 또한 구성 파일을 다시로드하는 사용자가 아닌 응용 프로그램 ( 데몬 )에 대해 완전히 다른 기존 의미를 갖습니다 .

SIGQUIT는 무시할 수없는 신호 중 가장 거친 신호입니다. 응용 프로그램이 잘못 작동하고 지금 종료해야 할 때 사용되며, 기본적으로 코어 덤프 파일 (대부분의 사용자가 코어 파일이 기본적으로 생성되지 않는 경향이있는 현대 시스템)을 남겼습니다. . 응용 프로그램은 처리기를 설정할 수 있지만 SIGQUIT의 의도는 무언가 잘못되었을 때 사용되므로 매우 적습니다 (특히 상태를 저장하지 않아야 함).


"상태 저장"에 대해 더 자세히 설명해 주시겠습니까? 텍스트 편집기에 있는데 죽이면 내용이 저장되지 않은 것 같습니다.
Kenny

2
@Kenny 저장하지 않으려는 임시 수정 작업을 수행했을 수 있으므로 대부분의 편집기는 파일을 저장하지 않습니다. 고급 편집기 (예 : vi, emacs)에는 데이터를 수시로 저장하는 자동 저장 파일이 있습니다. SIGHUP에서는 일반적으로 자동 저장 파일이 최신 상태인지 확인합니다.
Gilles 'SO- 악마 그만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.