次のコマンドを実行するとします。
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
スクリプトの実行中にプロセスが消える可能性を処理するための別のプロセスがあります。