예를 들어서 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
#:]
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
#:]
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
#:]
14286916
#:]
cut 뒤에 -d 는 델리미터(delimeter)로 구분해 내겠다는 것인데 스페이스 문자로 자라내겠다는 말입니다. 즉 6번째 값이 프로세스id라고 보는 것입니다. 두번째 항목인데 왜 6번째냐고요? 그냥 1 부터 계속 해 봤지요. 5번번째가 tmax 가 리턴되고 6번째가 14286916 이 리턴되더군요.
이제 완성된 kill 하는 쉘은 아래와 같습니다.
#!/bin/sh
#--------------------------------------------
# made by Sung Hwan Choi, 2011-12-20
#--------------------------------------------
# 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
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일>
'컴퓨터활용 > 유닉스' 카테고리의 다른 글
날짜와 시간을 구하는 쉘 (0) | 2012.04.16 |
---|---|
성능 모니터링 무료 프로그램 nmon (0) | 2012.03.28 |
배치프로그램 실행 쉘 예제 (0) | 2011.04.28 |
Unexpected end of file (0) | 2010.11.12 |
쉘에서 로그 출력 방향 지정 (0) | 2010.09.06 |