Linuxでは、プロセスタイトルに「test test 123」という正確な文字列を含むプロセス数をどのように確認できますか?

Linuxでは、プロセスタイトルに「test test 123」という正確な文字列を含むプロセス数をどのように確認できますか?

私はこの問題をWindowsで解決しましたが、Linuxで行う方法は混乱しています。

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

次に、出力で空でない行数を数えます。これは非常に遅いですが効果的です。今私は同じことをするLinuxの方法を探しています。

言い換えれば、「テストテスト123」は、プロセス全体のタイトルにすることも、それから始めることもできます。これは非常に重要です。

答え1

長い話を短く:使用pgrep -cf "test test 123"


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

ps aux 

grep検索文字列を使用してリストをフィルタリングできるようになりました。

ps aux | grep "test test 123"

これにより、一致する行が印刷されます。数を計算するには、grep -cwhichを使用して一致する行数を印刷します。

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 -c21

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

これにより、作業に適したツールであるものを見つけることができますpgrep。これはプロセスを見つけるために特別に設計されたツールです。

$ pgrep -cf "test test 123"
1

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

それ自体をスキップするもう1つの一般的な方法は、コマンドラインに文字列が含まれないように、同じ文字列のgrep代わりに単一文字の文字クラスを使用することです。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

この技術の詳細については、以下を参照してください。ここ。しかし、システムにpgrepLinuxシステムの機能がある場合、実際には必要ありません。

答え2

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

トリックが必要です

関連情報