Linux では、プロセス タイトルのどこかに「test test 123」という正確な文字列が含まれるプロセスの数をどのように判断すればよいでしょうか?

Linux では、プロセス タイトルのどこかに「test test 123」という正確な文字列が含まれるプロセスの数をどのように判断すればよいでしょうか?

Windows ではすでにこの方法がわかりましたが、Linux でこれを行う方法がわかりません。

tasklist /V /NH | find "test test 123"

そして、出力内の空でない行の数を数えます。これは非常に遅いですが、機能します。現在、同じことを実行する Linux の方法を探しています。

つまり、「test test 123」は完全なプロセス タイトルになることができ、それで始まることも、それで終わることも、あるいは途中に置くこともできます。これは重要です。

答え1

要約: 使用pgrep -cf "test test 123"


プログラムpsは実行中のすべてのプロセスを一覧表示します。具体的には、次の操作を試してください。

ps aux 

grepこれで、文字列を検索するために、そのリストをフィルタリングすることができます。

ps aux | grep "test test 123"

これにより、一致する行が出力されます。行数を数えるには、grep -c代わりに一致する行の数を出力する which を使用します。

ps aux | grep -c "test test 123"

このアプローチの問題は、grep上記のプロセスも結果に表示されることです。たとえば、現在 という名前のファイルを編集していますtest test 123が、上記のコマンドを実行すると、ファイル エディターのプロセスと 自体の両方が表示されますgrep

$ ps aux | grep  "test test 123"
terdon   2461453 22.0  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2462354  0.0  0.0   8832  2292 pts/1    S+   15:53   0:00 grep --color test test 123

したがって、 の代わりにgrep -cが返されます。21

$ ps aux | grep -c "test test 123"
2

そこで、この仕事に最適なツールである が登場しました。pgrepこれは、プロセスを見つけるために特別に設計されたツールです。

$ pgrep -cf "test test 123"
1

-c「一致を数える」ことを意味し、 は-f「プロセス名だけでなく、コマンド ライン全体を検索する」ことを意味します。

自体をスキップするもう 1 つの一般的なトリックgrepは、同じ文字列の代わりに 1 文字の文字クラスを使用して、grepコマンド ラインに文字列が含まれないようにすることです。

$ ps aux | grep  "test test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2476971  0.0  0.0   8832  2236 pts/1    S+   15:56   0:00 grep --color test test 123
$ ps aux | grep  "[t]est test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
$ ps aux | grep -c "[t]est test 123"
1

このトリックの詳細については、ここpgrepただし、 Linux システムと同様にシステムにこの機能がある場合は、実際には必要ありません。

答え2

echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))

トリックにすべき

関連情報