pgrep
これを使用してコマンドを実行すると、watch
実際のpgrep出力だけでなくプロセスも表示されますwatch
。
例:
watch pgrep -lf donothing
3つのプロセスが表示されますが、
pgrep -lf donothing
いずれも表示されません。watch
見せずにそれを適切に処理するためのエレガントな方法はありますか?私自身のプロセスはwatch
?
編集する
Patrickのアドバイスを活用してください。
watch pgrep -f '^python donothing.py'
私の使用量を表示しますpgrep
(2秒ごとに更新されます...)
watch pgrep -l 'python donothing.py'
(これらのpgrep
コマンドは単独では機能しますが、組み合わせては機能しませんwatch
)。
watch "pgrep 'python donothing.py'"
プロセスがありますが、何も表示されません。
ベストアンサー1
pgrep donothing.py
あなたの意見で判断したり、またはする必要がありますpgrep -x donothing.py
。
使用されると、pgrep -f
名前および/または引数に一致する文字列を持つすべてのコマンドを見つけます。結果をフィルタリングする良い方法はありません。解決策は、必要なものを正確に一致させることであるため、プロセス名を一致させることです。
pgrep
デフォルトでは、プロセス名のみが一致します。デフォルトでは、名前に一致する文字列を含むすべてのプロセスを検索します。-x
名前が文字列と正確に一致するプロセスを検索します。
pgrep
また、スクリプトを理解するのに十分スマートです。というスクリプトがある場合(または同様のもの)foo.sh
と表示されます。この場合、スクリプト名が比較されます。だからあなたはすることができます または 。ps
/bin/sh foo.sh
pgrep
pgrep foo.sh
pgrep -x foo.sh
したがって、あなたの場合は、pgrep -x donothing.py
正確な一致を得るために努力する必要があります。
編集:
これはASスクリプトでのみ機能することに注意してください/path/to/donothing.py
。起動するとpython donothing.py
動作しません。
この場合は、のような正規表現を使用する必要がありますpgrep -f '^python donothing.py'
。
EDIT2:参照に
問題watch
があります。 runningはパラメータなしで実行されますwatch pgrep -f '^python donothing.py'
。予想したものとは異なり、パラメータとして渡さpgrep
れます。完全なpgrepコマンドを引用する必要があります。-f '^python donothing.py'
watch
pgrep
watch "pgrep -f '^python donothing.py'"
別の注意事項として。他の目的に使用する計画であれば、これを行う方が安全です。
watch "pgrep -f '(^|\S+/)python donothing.py'"
これは/usr/bin/python
プロセスが単純ですpython
。