다음 명령을 실행한다고 가정해 보겠습니다.
sleep 500
/bin/sleep 500
sleep 30
내가 관심 있는 것은 특정 매개변수(이 경우 유일한 매개변수는 500
)를 사용하여 수면 프로그램의 인스턴스 수를 계산하는 방법입니다.
따라서 위의 예에서 인스턴스 수를 계산하면 /bin/sleep 500
2가 반환되어야 합니다.
나는 이것을 시도했지만 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/null
cat
스크립트가 실행되는 동안 프로세스가 사라질 수 있는 가능성을 처리하기 위한 별도의 프로세스가 있습니다 .