좋은 프로세스를 종료하려고 할 때 어떤 "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는 대부분의 표준 명령 줄 같은 유틸리티에 대한 효과적인 남아 않는 find나 cat.

시스템이 종료되는 동안 대부분의 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.