좋은 프로세스를 종료하려고 할 때 어떤 "kill"옵션을 사용해야합니까?


26

사람들로부터 많은 메시지를 받고 있으며 실제로 사용하는 데 큰 차이가 없는지 궁금합니다.

kill 'x'
killall 'x'
kill -9 'x'

이것들은 내가 지금까지 사용하도록 들었던 몇 가지 옵션이지만, 어떤 사람들은 kill -9가 너무 과도하다고 말하고, 그 자체로는 kill이 작동하지 않는다고 말합니다.

프로세스를 종료하는 가장 표준적인 경우에 사용해야 할 조언이 있습니까 (따라서 상태도)?

[편집] 처음부터 새로운 프로세스를 실행할 수 있도록 프로세스 실행을 중지하고 싶을 때 사용할 항목을 찾고 있습니다.


1
학대를 피하는 UUK9 양식 서신 도 참조하십시오 SIGKILL.
jw013

1
다른 모든 신호를 번호와 함께 나열하고 kill -l숫자를 해당 신호 이름으로 변환하려면 예 kill -l 9를 들어을 반환 KILL합니다.

답변:


24

기본 처리가 프로세스를 종료하는 신호가 많이 있습니다. 최종 종료 신호는 처리 할 수없고 프로세스는 죽을 수밖에 없기 때문에 SIGKILL입니다. 그러나 이것은 또한 보내면 프로세스가 정리할 기회가 없어진다는 것을 의미합니다. 따라서 SIGKILL을 보내면 프로세스가 종료되지 않은 경우에만 처리 ​​할 수있는 SIGTERM과 같은 신호를 보내야합니다.

SIGINT 및 SIGQUIT는 임의의 프로세스 종료에 적합하지 않습니다. 터미널의 키보드에서 생성 될 수 있기 때문에 많은 응용 프로그램에서 특수 목적으로 사용합니다. 예를 들어, 파이썬 인터프리터는 SIGINT를 사용하여 KeyboardInterrupt예외 를 생성 하고 (대화식 파이썬 세션에서도 단순히 프롬프트로 돌아갑니다) JVM은 SIGQUIT를 사용하여 스택 추적을 덤프합니다. SIGINT 및 SIGQUIT는 대부분의 표준 명령 줄 같은 유틸리티에 대한 효과적인 남아 않는 findcat.

시스템이 종료되는 동안 대부분의 UNIX 및 Linux 시스템은 SIGTERM을 모든 프로세스에 보낸 다음 5 초 정도 기다렸다가 SIGKILL을 보냅니다. 이것은 임의의 프로세스를 안전하게 종료하는 데 권장되는 방법입니다.

또한 SIGKILL조차 프로세스가 깨어날 때까지 무정전 대기 상태에있는 프로세스를 종료하지 않을 수도 있습니다.


1
훌륭한 답변입니다. kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;권장 사항에 대한 참조가 있습니까?
l0b0

+1 종류의 답변. SIGHUP은 어떻습니까?
Alois Mahdal

2
@AloisMahdal : SIGHUP전화 접속 회선이 일반적인 날부터 시작됩니다. 이 신호는 회선이 끊 겼음을 표시하기 위해 전송되었습니다. 나중에, SIGHUP드문 경우에 데몬은 프로세스를 다시 시작하지 않고 구성 파일을 다시 읽는 데 때때로 사용했습니다. 이 현대에는 SIGHUP거의 사용되지 않습니다. 많은 데몬 즉 (다시 초기화하는 자신 만의 방법으로해야합니다 apachectl graceful또는 rndc reconfig당신이 사용해야하지 않는 것들에 대한. [init.d|smf|upstart|launchd]가능한 컨트롤을.
bahamat

13

가장 부드러운 것으로 시작하여 거기에서 에스컬레이션해야합니다. 이것은 SIGINT, SIGTERM, SIGQUIT, SIGKILL을 의미합니다. 대부분의 사람들은 SIGINT와 SIGQUIT를 건너 뜁니다.


또한 일부 응용 프로그램 (예 : JDK)은 SIGQUIT를 다르게 처리합니다. 특정 응용 프로그램이 처리하는 방법을 모르면 SIGQUIT를 사용하지 않을 것입니다.
dimo414
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.