標準パス(パラメータを含む)で特定のプロセスのインスタンス数を計算する方法は?

標準パス(パラメータを含む)で特定のプロセスのインスタンス数を計算する方法は?

次のコマンドを実行するとします。

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

関連情報