ps
はプロセスの名前としてbash
を返します...代わりにシェルスクリプトの名前が欲しいです。
たとえば、私のスクリプトがTestEric.sh
である場合、現在実行中のそのスクリプトのインスタンスの数をリストしたいと思います。
ここでの問題は、ps
がデフォルトで出力に基本コマンドのみを表示し、引数を含むコマンドライン全体ではないことです。
bash TestEric.sh
を使用してスクリプトを起動する場合、ベースコマンドはbash
です。 TestEric.sh
(おそらくパスを含む)として実行する場合、ベースコマンドはbashではなく、そのコマンドになります。
pgrep
の代わりにps
を簡単に使用して、名前でフィルター処理されたプロセスを一覧表示できます。 -f
フラグがあり、指定されたパターンをベースコマンドだけでなくコマンドライン全体と一致させます。
-a
フラグを使用すると、PIDだけでなく、デバッグ目的でコマンドライン全体が出力に表示されます。動作を確認したら、スクリプトで再度削除する必要があります。
これを試して:
pgrep -f -a TestEric.sh
wc
出力行をカウントすることにより、後でpgrep
を使用してプロセスをカウントできます。
pgrep -f TestEric.sh | wc -l
代わりにps u
を実行してみてください。マニュアルページから、uオプションはdisplay user-oriented format
に対応しており、スクリプトの実行に使用されるシェルとスクリプト自体の名前の両方が表示されます。
どうやら、ファイルの先頭に!#/bin/bash
を追加すると役立ちます...スクリプトの名前がps
レポートに表示されます。