좋은 프로세스를 종료하려고 할 때 어떤 “kill”옵션을 사용해야합니까? 사용하도록 들었던

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

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

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

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

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



답변

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

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

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

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


답변

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


답변