
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
が返されます。2
1
$ 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))
トリックにすべき