안녕하세요?
이희천입니다.
솔라리스 5.10(intel) 에서 아래와 같이 프로세스가 실행되고 있을 때 /root/test/test_app 이
실행되고 있는 개수(또는 PID) 얻으려는 Shell 을 작성하려 합니다.
# ps -ef
...
root 1877 1 0 May 14 ? 0:00 /root/test/test_app
root 1887 1 0 May 14 ? 0:00 /home/root/test/test_app
root 1839 1 0 May 14 ? 0:52 /home/root/test/test_app
...
-------------------------------------------------------------------------------------------
#!/bin/sh
APP_NAME=/root/test/test_app
CNT=`ps -ef | grep -w $APP_NAME | egrep -v "grep" | wc -l | awk '{print $1}'`
echo "CNT : $CNT"
-------------------------------------------------------------------------------------------
위 shell 코드는 리눅스에서는 정상적으로 1개로 나옵니다.
그러나 솔라리스 5.10(intel) 에서는 grep -w 을 사용할 수가 없어서 다음과 같이 변경하였습니다.
-------------------------------------------------------------------------------------------
#!/bin/sh
APP_NAME=/root/test/test_app
############ 아래 커맨드는 /root/test/test_app 이 포함된 3개가 다 나옴 ################################
ps -ef | grep $APP_NAME | egrep -v "grep" | awk '{print $NF} END { }'
##########################################################################################
CNT=`ps -ef | grep $APP_NAME | egrep -v "grep" | awk '{if($NF == "$APP_NAME") print $2} END { }' | wc -l | awk '{print $1}'`
echo "CNT : $CNT"
-------------------------------------------------------------------------------------------
위 결과는 0이 나옵니다.
아래와 같이 변경하였을 때는 결과값이 1이 나옵니다.
CNT=`ps -ef | grep $APP_NAME | egrep -v "grep" | awk '{if($NF == "/root/test/test_app") print $2} END { }' | wc -l | awk '{print $1}'`
변수를 사용하여 원하는 결과값을 얻을 수 있는 방법이 없는지요?
감사합니다.
#!/bin/sh
APP_NAME=/root/test/test_app
CNT=`pgrep -f $APP_NAME|wc -l`
echo "CNT : $CNT"