Abstraction
리눅스 환경에서 강제로 프로세스를 종료해야할 일이 종종 있다.
여러개의 프로세스를 종료할때 문제가 있는데 부모(Parent) 프로세스를 종료한다고 자식(Child) 프로세스가 자동으로 종료되지 않는다는 점이다. 그래서 때로는 자식만 남아서 아무일도 못하는 좀비가 되는 경우가 있다.
여기서는 부모 프로세스를 종료하면 자식도 recursive 하게 따라서 종료하는 스크립트를 소개한다.
코드
for cpid in $(ps -o pid= –ppid $1)
do
dokill $cpid
done
echo "killing: $(ps -p $1 -o cmd=)"
kill -9 $1 > /dev/null 2>&1
}
PID=`ps axo pid,ppid,cmd | grep XXXX | grep -v grep | awk ‘{print $1}’`
echo "Parent ID is $PID"
if [ "$PID" != "" ]
then
dokill $PID
fi
grep XXXX 로 검색되는 부모 프로세스와 이에 따른 자식 프로세스를 recursive 하게 돌면서 모두 종료시킨다. grep 프로세스 본인도 검색이 되므로 반드시 자신은 grep -v grep 으로 제외해야 한다.


