SIGTERM은 신호 처리기가 없으면 SIGKILL과 동일하게 동작합니까?

SIGTERM은 신호 처리기가 없으면 SIGKILL과 동일하게 동작합니까?

SIGTERM 및 SIGKILL에 대한 대부분의 설명은 SIGKILL을 가리킵니다.

SIGTERM 및 SIGINT와 달리 [...]는 포착하거나 무시할 수 없습니다. [...] (위키피디아)

이것이 SIGTERM과 SIGKILL의 유일한 차이점입니까? 특히 프로세스에 SIGTERM 핸들러가 설치되어 있지 않은 경우 SIGTERM 또는 SIGKILL을 프로세스에 보내는 것에는 차이점이 있습니까?

답변1

신호 구성이 없으면 SIGTERM및 을 SIGKILL포함하여 기본 동작이 프로세스를 종료하는 다른 신호와 마찬가지로 적어도 프로세스가 종료되는 관점에서 사실상 동일합니다 . ~처럼SIGUSR1SIGUSR2이르카초부모 프로세스가 자식 프로세스를 종료하는 신호에 대해 알린다는 점을 지적합니다. (이것은 쉘이 신호를 구별하고 인쇄하는 방법입니다.예를 들어"종료" v. "사용자 정의 신호 1").

Wikipedia에서 언급했듯이, SIGKILL반환되거나 무시될 수 없으며 SIGTERM이는 프로세스가 무효화되기 위해 핸들러를 설치할 필요가 없으며 SIGTERM간단히 차단하거나 무시할 수 있음을 의미합니다.sighold(), sigrelse()그리고sigignore()).

POSIX 세부정보신호 처리의 기본 원리. 리눅스signal(7)신호는 맨페이지에도 자세히 설명되어 있습니다.

답변2

이것이 SIGTERM과 SIGKILL의 유일한 차이점입니까?

아니요.

SIGKILLa와 uncaught의 큰 차이점은 SIGTERM전자도 역시 마찬가지라는 것입니다.깨우다에서만 사용할 수 있는 중지된 프로세스(즉시 자체 소멸 가능)입니다 SIGCONT.

간단한 예:

$ sleep 1000 & sleep 1; kill -TSTP $!
[1] 6455

[1]+  Stopped                 sleep 1000
$ kill -TERM 6455
$ jobs
[1]+  Stopped                 sleep 1000
$ kill -CONT 6455
$ jobs
[1]+  Terminated              sleep 1000

TERM, HUP, INT등의 신호가 효과가 있는지 확인하려면 CONT순서에 상관없이 신호와 쌍을 이루어야 합니다.

bash 내장의 마법 때문에 사람들은 이것을 쉽게 이해하지 못할 수도 있습니다. 또는 (또는 부정된 pid) kill와 같은 작업 ID와 함께 사용하면 중지된 프로세스를 나타냅니다.%%1일하다, 그럴 것이다다 스스로 해라커튼 뒤:

/* Give PID SIGNAL.  This determines what job the pid belongs to (if any).
   If PID does belong to a job, and the job is stopped, then CONTinue the
   job after giving it SIGNAL.  Returns -1 on failure.  If GROUP is non-null,
   then kill the process group associated with PID. */
int
kill_pid (pid, sig, group)

관련 정보