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

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

저는 사람들로부터 혼합된 메시지를 많이 받았는데 여러분이 사용하는 것에 실제로 그렇게 많은 차이가 없는지 궁금합니다.

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

지금까지 나는 이러한 옵션을 사용하라는 말을 들었지만 어떤 사람들은 kill -9가 너무 많다고, kill 자체가 작동하지 않는다고 말합니다.

프로세스(및 해당 상태)를 종료하는 가장 표준적인 경우에 사용해야 하는 제안이 있는 사람이 있습니까?

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

답변1

기본적으로 프로세스를 종료하는 신호를 처리하는 신호가 많이 있습니다. 최종 종료 신호는 처리할 수 없고 프로세스가 종료될 수밖에 없기 때문에 SIGKILL입니다. 그러나 이는 전송하면 프로세스에서 정리할 기회가 거부된다는 의미이기도 합니다. 따라서 SIGTERM과 같이 먼저 처리할 수 있는 신호를 보내고 잠시 후에 프로세스가 종료되지 않는 경우에만 SIGKILL을 보내는 것이 좋은 에티켓입니다.

SIGINT 및 SIGQUIT는 임의 프로세스 종료에 적합하지 않습니다. 터미널 키보드에서 생성할 수 있으므로 많은 응용 프로그램에서 특별한 목적으로 사용합니다. 예를 들어, Python 인터프리터는 SIGINT를 사용하여 KeyboardInterrupt예외를 생성하는 반면(대화형 Python 세션에서도 프롬프트로 돌아갑니다), JVM은 SIGQUIT를 사용하여 스택 추적을 덤프합니다. SIGINT 및 SIGQUIT는 대부분의 표준 명령줄 유틸리티(예: find또는 ) 에서 계속 작동합니다 cat.

시스템 종료 중에 대부분의 UNIX 및 Linux 시스템은 SIGTERM을 모든 프로세스에 보내고 5초를 기다린 후 SIGKILL을 보냅니다. 이는 모든 프로세스를 안전하게 종료하는 데 권장되는 방법입니다.

또한 SIGKILL조차도 프로세스가 깨어날 때까지 중단 없이 대기하는 프로세스를 종료하지 못할 수도 있습니다.

답변2

가장 온화한 것부터 시작하여 점점 더 나아가야 합니다. 이는 SIGINT, SIGTERM, SIGQUIT, SIGKILL을 의미합니다. 대부분의 사람들은 SIGINT와 SIGQUIT를 건너뜁니다.

관련 정보