假设我运行以下命令:
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
用于应对脚本运行时进程可能消失的可能性。