私はこの問題を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 -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
2
1
$ 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
この技術の詳細については、以下を参照してください。ここ。しかし、システムにpgrep
Linuxシステムの機能がある場合、実際には必要ありません。
答え2
echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))
トリックが必要です