메뉴 닫기

프로세스 kill 간단 팁

기본적으로 사용하는 프로세스 킬 명령은 아래와 같습니다

  • kill -- -$PGID     Use default signal (TERM = 15)
  • kill -9 -$PGID     Use the signal KILL (9)

 

호스팅 시스템을 운영하다보면은 데몬의 오류라던지, 프로세스상의 문제가 있어

/usr/local/apache/bin/apachectl stop 명령을 했을 경우 모든 프로세스가 종료되지 않고 남아 있는 경우가 있습니다

 

이럴 경우 pkill, 또는 killall 등을 이용해서 프로세스를 죽여도 되지만 해당 명령어로도 프로세스가 죽지 않으면

 

kill PID 형태로 하나씩 프로세스를 죽여줘야 합니다 1~2개의 프로세스면 쉽게 처리할 수 있지만 프로세스가  100개 정도 될때에는

하나씩 삭제를 할수 없기 때문에 아래와 같이 grep 및 awk 등을 사용하시면 쉽게 프로세스를 정리할 수 있습니다

 

예) kill -9 `ps -ef |grep httpd

아래는 참고 사항 입니다 

 

Kill all the processes belonging to the same process tree using the Process Group ID (PGID)

  • kill -- -$PGID     Use default signal (TERM = 15)
  • kill -9 -$PGID     Use the signal KILL (9)

You can retrieve the PGID from any Process-ID (PID) of the same process tree

  • kill -- -$(ps -o pgid= $PID | grep -o '[0-9]*')   (signal TERM)
  • kill -9 -$(ps -o pgid= $PID | grep -o '[0-9]*')   (signal KILL)

Special thanks to tanager and Speakus for contributions on $PID remaining spaces and OSX compatibility.

Explanation

  • kill -9 -"$PGID" => Send signal 9 (KILL) to all child, grandchild…
  • PGID=$(ps opgid= "$PID") => Retrieve the Process-Group-ID from any Process-ID of the tree, not only the Process-Parent-ID. A variation of ps opgid= $PID is ps -o pgid --no-headers $PID where pgid can be replaced by pgrp.
    But:
    • ps inserts leading spaces when PID is less than five digits and right aligned as noticed by tanager. You can use:
      PGID=$(ps opgid= "$PID" | tr -d ' ')
    • ps from OSX always print the header, therefore Speakus proposes:
      PGID="$( ps -o pgid "$PID" | grep [0-9] | tr -d ' ' )"

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x