ps를 이용한 프로세스 갯수세기

comdemo의 이미지

#!/bin/bash

if [ -z $1 ]
then
    echo "ex>> ./psnum command"
else
    num1=`ps -ef | grep $1 | wc -l`
    let "num2=${num1}-2"
    if [ $num2 = '0' ]
    then
        echo "입력하신" $1"는 완료되었습니다."
    else
        echo "입력하신" $1"는 현재" $num2"개 작동중입니다."
    fi
fi

위와 같이 간단하게 프로세스를 세는 쉘프로그램을 작성하였습니다.

구한 num1에서 2를 뺀건 grep과 현재 프로그램을 뺀것입니다.

코드는 맞게 작성한듯 한데 결과값이 1이 더 크게 나오네요.

제가 잘못 생각하고 있는건가요??

Necromancer의 이미지

wc -l로 세는 동안에 grep 프로세스가 남기 때문에 그렇습니다.

grep xxx 한 것이 wc -l이 세는 갯수에 그대로 포함돼버린 거죠. wc -l이 종료될때 grep xxx도 같이 종료되죠.

Written By the Black Knight of Destruction

cjh의 이미지

자기자신이 포함되는 문제라면 임시파일로 리다이렉션시킨 후에 세어도 됩니다.

--
익스펙토 페트로눔

pool007의 이미지

ps -ef | grep $1 | grep -v grep | wc -l

이렇게 해보세요

--
Passion is like genius; a miracle.

IsExist의 이미지

pgrep 원츄~

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

익명 사용자의 이미지

pool007 님이 쓰신것처럼만 바꿔주면 되겠네용

-v 옵션이 "~ 제외하고.." 의미였지요 아마?

comdemo의 이미지

-v 옵션은 gnu grep에만 있는 옵션인가 보네요..
HP Unix에 들어있는 grep에는 해당 옵션이 없군요.. :cry:

근데 위에서 말씀하신 부분인

grep 프로세스 한개
현재 실행하는 프로그램 프로세스 한개

이렇게 총2개를 뺀게 세고자 하는 프로세스의 갯수여야 하는거 아닌가요??

crazydak의 이미지

comdemo wrote:
-v 옵션은 gnu grep에만 있는 옵션인가 보네요..
HP Unix에 들어있는 grep에는 해당 옵션이 없군요.. :cry:


HP-UX에도 있던데...HPUX 버전이 어떻게 되시나요?
ganadist의 이미지

pidof $1 | wc -w

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러