컴퓨터활용/유닉스

특정 프로세스를 찾아서 강제로 죽이는 쉘

멜번초이 2012. 2. 11. 15:04
반응형

예를 들어서 svn 이라는 프로세스를 죽이고자 할 때 다음과 같이 합니다.

#:]ps -ef | grep svnserve
    tmax 14286916        1   0  12:17:49      -  0:00 svnserve -d -r /Repository/SvnRepo
    tmax  5570908 19988634   0  14:53:19  pts/4  0:00 grep svnserve
#:]

여기서 svnserve 라는 프로세서를 찾아서 죽이고 싶은데 grep 자기자신도 같이 나오므로 하나로 줄여줘야 한다. 그래서 하나 더 grep 합니다.

#:]ps -ef | grep svnserve  | grep SvnRepo
    tmax 14286916        1   0  12:17:49      -  0:00 svnserve -d -r /app/QIS/Repository/SvnRepo
#:]

이제 여기서 프로세스 id 인 14286916   만을 구해내야 하는데 이것은 cut 명령을 이용해서 할 수 있어요.

#:]ps -ef | grep svnserve  | grep SvnRepo  | cut -d ' ' -f 6
14286916
#:]

cut 뒤에 -d 는 델리미터(delimeter)로 구분해 내겠다는 것인데 스페이스 문자로 자라내겠다는 말입니다.  즉 6번째 값이 프로세스id라고 보는 것입니다.  두번째 항목인데 왜 6번째냐고요? 그냥 1 부터 계속 해 봤지요. 5번번째가 tmax 가 리턴되고 6번째가 14286916 이 리턴되더군요.

이제 완성된 kill 하는 쉘은 아래와 같습니다.

#!/bin/sh
#--------------------------------------------
# made by Sung Hwan Choi, 2011-12-20
#--------------------------------------------
ps -ef | grep svnserve  | grep SvnRepo
PID=`ps -ef | grep svnserve  | grep SvnRepo  | cut -d ' ' -f 6`
if [ "$PID" == "" ]; then
    echo "no process exist"
else
    echo "      process id (${PID}) will be killed by force!"
    kill -9 ${PID}
fi

이런 모든 기능을 하는 명령이 하나 있는데 killall 입니다. 
그냥 간단하게 killall svnserve 라고 치면 svnserve 프로세스가 모두 죽어줍니다. 

<2012년2월10일>


반응형