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

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

가장 폭력적인 신호 kill -9(SIGKILL)를 제외하고 나머지 3가지 일반적인 신호의 차이점을 잘 이해하지 못합니다(여기) -HUP(1), -INT(2) 및 -TERM(15).

어떤 상황에서 하나는 작동하고 다른 하나는 작동하지 않습니까?

일반적으로 -9( -KILL)는 언제 실패하는가?

나에게 그들은 프로세스를 종료해야 하는 것 같습니다.우아하게,저장하지 마십시오. 심각도를 평가하겠습니다 -HUP < -TERM < -INT < -KILL.

답변1

SIGKILL은 결코 실패하지 않습니다실행 중인 프로세스를 종료하는 것이 핵심입니다. 애플리케이션에 반응할 기회를 제공하기 위한 다른 신호가 존재합니다.

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

SIGINT는 그들 중 "가장 약한" 것입니다. 전통적인 의미는 "지금 하고 있는 일을 멈추고 추가 사용자 입력을 기다리다"입니다. Ctrl터미널에서 +에 의해 생성되는 신호 입니다 . C비대화형 프로그램은 일반적으로 이를 SIGTERM으로 처리합니다.

SIGTERM은 "정상적인" 종료 신호입니다. 애플리케이션이 완전히 종료되도록 지시합니다. 응용 프로그램은 리소스(예: 남겨질 임시 파일)를 확보하기 위해 상태를 저장하는 데 약간의 시간이 필요할 수 있습니다. 중요한 애플리케이션 중에 중단되기를 원하지 않는 애플리케이션은 일정 기간 동안 SIGTERM을 무시할 수 있습니다.

SIGHUP은 심각도 측면에서 SIGTERM과 거의 동일하지만 사용자가 터미널과의 연결을 끊을 때 터미널에서 실행 중인 애플리케이션에 자동으로 전송된다는 점에서 특정한 역할을 합니다(어원적으로 말하면 사용자가 통화 중이기 때문입니다. 모뎀에 연결된 회선이 끊어졌습니다). SIGHUP은 명시적으로 전송해야 하는 SIGTERM과 달리 일반적으로 비자발적이므로 애플리케이션은 해당 상태를 SIGHUP에 저장해야 합니다. SIGHUP은 또한 사용자를 대면하지 않는 애플리케이션에 대해 완전히 다른 일반적인 의미를 갖습니다(악마), 즉 구성 파일을 다시 로드하는 것입니다.

SIGQUIT는 무시할 수 있는 가장 심각한 신호입니다. 애플리케이션이 오작동하여 즉시 종료해야 할 때 사용하도록 고안되었으며, 기본적으로 전통적으로코어 덤프파일(대부분의 사용자가 어떤 핵심 파일이 무엇인지 모르는 최신 시스템은 기본적으로 해당 파일을 생성하지 않는 경향이 있음) 애플리케이션은 핸들러를 설정할 수 있지만 SIGQUIT의 목적은 심각한 오류가 발생한 경우에 사용되는 것이므로 거의 수행하지 않아야 합니다(특히 상태를 저장하지 않아야 함).

관련 정보