표준 경로(매개변수 포함)로 특정 프로세스의 인스턴스 수를 계산하는 방법은 무엇입니까?

표준 경로(매개변수 포함)로 특정 프로세스의 인스턴스 수를 계산하는 방법은 무엇입니까?

다음 명령을 실행한다고 가정해 보겠습니다.

sleep 500
/bin/sleep 500
sleep 30

내가 관심 있는 것은 특정 매개변수(이 경우 유일한 매개변수는 500)를 사용하여 수면 프로그램의 인스턴스 수를 계산하는 방법입니다.

따라서 위의 예에서 인스턴스 수를 계산하면 /bin/sleep 5002가 반환되어야 합니다.

나는 이것을 시도했지만 pgrep -xfc '/bin/sleep 500'괄호 안의 매개 변수와 정확히 일치하므로 sleep 500계산되지 않습니다.

답변1

귀하의 예에서는 다음을 사용할 수 있습니다.

pgrep -fc 'sleep 500'

/bin/sleep 500와 둘 다 일치합니다 sleep 500.

또는 더 정확하게 알고 싶다면 다음과 같이 하세요.

pgrep -fc 'sleep 500$'

답변2

GNU 시스템에서:

$ ps --no-header -C sleep -o args | grep -Ec ' 500( |$)'
2

답변3

Linux와 유사한 지원을 제공하는 시스템 /proc:

#!/bin/sh
if [ $# != 2 ]
then
    echo usage: "$0" pathname commandline_regexp
    exit 1
fi
cd /proc
for p in [0-9]*
do
    exe=$(readlink $p/exe 2>/dev/null)
    if [ "$exe" = "$1" ] &&
        cat $p/cmdline 2>/dev/null | tr '\0' ' ' | grep -q -- "$2"
    then
        echo match $p
    fi
done

예:

$ sleep 500&
[3] 18280
$ sleep 600&
[4] 18281
$ ./rpgrep /bin/sleep '.*sleep 500 $'
match 18280
$ ./rpgrep /bin/sleep '.*sleep.*00'
match 18280
match 18281

노트:

  • 2>/dev/nullcat스크립트가 실행되는 동안 프로세스가 사라질 수 있는 가능성을 처리하기 위한 별도의 프로세스가 있습니다 .

관련 정보