引数をフィルタリングできる 'ps' コマンドのフラグですか?

引数をフィルタリングできる 'ps' コマンドのフラグですか?

コマンドをフィルタリングできる引数「-C」を知っています。

しかし、私のシナリオでは、同じプロセス名で異なる引数を持つプロセスがいくつかある可能性があります。

これらの引数をフィルタリングするにはどうすればよいでしょうか?

(後で grep にパイプできることはわかっていますが、100% 正確ではありません。つまり、引数に別の引数が含まれる場合、たとえば、次のリストで引数「bar」でフィルター処理したい場合などです。

+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23      | foo     | bar       |
| 48      | foo     | barbaz    |
+---------+---------+-----------+

PS: ほとんどの回答では「ps」ではなく「pgrep」を使用することを推奨していると思いますが、可能であればこれを避けたいと思います。

答え1

単独ではそれを達成できないと思いますps。 を使用したフィルタリングはgrep理想的ではないというのは正しいですが、pgrepチャンスを与えてもいいのであれば、次の方法で要件にかなり近づくことができます。

ps -p $(pgrep -f bar -d',')

この-fオプションはpgrep、プロセス名だけではなく完全なコマンド ラインを検索し、-dオプションは、PID を連結するために使用する区切り文字を指定します。

pid リストを渡すと、ps出力は完全なコマンド (引数を含む) 内のキーワードを含むものに制限されます。

「foo bar」には一致させたいが「foo barbaz」には一致させたくないという例では、次のようにして完全一致を検索します。

ps -p $(pgrep -f "foo bar$" -d',')   # Note the eol anchor '$'

答え2

そのようなオプションは存在しないと思います。少なくとも私のバージョンの には存在しませんpsps世の中の実装の多くにそのようなオプションがあるとは思えません。コマンド名は定義するのが非常に簡単ですが、コマンド引数となるとそうではありません。

いずれにせよ、Unix の哲学は、多くの単純なツール (例:psおよびgrep) を連結して、より複雑なタスクを実行することです。ps -Cこれは無理があると主張する人もいるかもしれません。実際、MacOS X にはpsそのようなオプションはないと思います。

具体的に何をしようとしているのですか?何ですかコンテクストあなたの質問に対する答えは?私の経験から言うと、出力を解析して自動化を行っているケースの 99% は、ps何をやっても間違ったやり方をしているからです...

関連情報