리눅스 환경에서 톰캣으로 실행한 프로세스를 shutdown.sh
을 통해 종료를 했는데
서비스에 문제가 있던 탓인지 혹은 다른 이유에서인지 정확히는 모르겠으나 프로세스가 죽지 않고 좀비 상태로 계속해서 쌓여 있었다.
평소에는 아무 생각없이 kill -9 [pid]
를 통해서 프로세스를 일일히 종료시켰겠지만 어느 순간 너무 비효율적이다 (귀찮다) 는 생각이 들었다.
알아본 결과 다음 명령어를 입력할 경우 일괄적으로 ps -ef | grep [regex]
을 통해 출력된
프로세스들을 종료할 수 있다는 것을 알게 되었다.
kill -9 `ps -ef | grep [regex] | grep -v grep | awk '{print $2}'`
(bourne shell)
or
kill -9 $(ps -ef | grep [regex] | grep -v grep | awk '{print $2}')
(bash)
ps -ef | grep [regex]
: 실행 중인 모든 프로세스 중 regex 가 포함된 프로세스grep -v grep
: grep 문자열이 들어간 프로세스 제외awk '{print $2}'
: 파이프를 통해 앞 과정에서 받아온 텍스트 중 2번째(PID)
만 출력kill -9
: 파이프를 통해 추출된 pid 들을 프로세스 강제 종료. (default: 15, 정상종료)