SIGTERM 및 SIGKILL에 대한 대부분의 설명은 SIGKILL을 가리킵니다.
SIGTERM 및 SIGINT와 달리 [...]는 포착하거나 무시할 수 없습니다. [...] (위키피디아)
이것이 SIGTERM과 SIGKILL의 유일한 차이점입니까? 특히 프로세스에 SIGTERM 핸들러가 설치되어 있지 않은 경우 SIGTERM 또는 SIGKILL을 프로세스에 보내는 것에는 차이점이 있습니까?
답변1
신호 구성이 없으면 SIGTERM
및 을 SIGKILL
포함하여 기본 동작이 프로세스를 종료하는 다른 신호와 마찬가지로 적어도 프로세스가 종료되는 관점에서 사실상 동일합니다 . ~처럼SIGUSR1
SIGUSR2
이르카초부모 프로세스가 자식 프로세스를 종료하는 신호에 대해 알린다는 점을 지적합니다. (이것은 쉘이 신호를 구별하고 인쇄하는 방법입니다.예를 들어"종료" v. "사용자 정의 신호 1").
Wikipedia에서 언급했듯이, SIGKILL
반환되거나 무시될 수 없으며 SIGTERM
이는 프로세스가 무효화되기 위해 핸들러를 설치할 필요가 없으며 SIGTERM
간단히 차단하거나 무시할 수 있음을 의미합니다.sighold()
, sigrelse()
그리고sigignore()
).
POSIX 세부정보신호 처리의 기본 원리. 리눅스signal(7)
신호는 맨페이지에도 자세히 설명되어 있습니다.
답변2
이것이 SIGTERM과 SIGKILL의 유일한 차이점입니까?
아니요.
SIGKILL
a와 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)