Linuxでコマンドラインを使用して、同じ名前の実行中のプロセスの数を見つける最良の方法を探していました。たとえば、実行中のbashプロセスの数を調べて「5」を取得したい場合。現在、「pidof」を実行し、トークン化された文字列をカウントするスクリプトがあります。これは正常に機能しますが、コマンドラインを介して完全に実行できるより良い方法があるかどうか疑問に思っていました。よろしくお願いします。
pgrep
が使用可能なシステムでは、-c
オプションは、指定された名前に一致するプロセスの数のカウントを返します
pgrep -c command_name
これはgrep
スタイルの一致であり、完全一致ではないことに注意してください。 pgrep sh
は、bash
プロセスとも一致します。完全一致が必要な場合は、-x
オプションも使用します。
pgrep
が使用できない場合は、ps
およびwc
を使用できます。
ps -C command_name --no-headers | wc -l
ps
の-C
オプションはcommand_name
を引数として取り、プログラムは実行可能ファイル名が指定されたコマンド名と一致するプロセスに関する情報のテーブルを出力します。これは、grep
- styleではなく、完全一致です。 --no-headers
オプションは、通常は最初の行として出力されるテーブルのヘッダーを抑制します。 --no-headers
を使用すると、一致するプロセスごとに1行が取得されます。次に、wc -l
は入力の行数をカウントして出力します。
result=`ps -Al | grep command-name | wc -l`
echo $result
ps -Al | grep -c bash
試してみてください:
ps -ef | grep -cw [p] rocess_name
OR
ps aux | grep -cw [p] rocess_name
例:=
ps -ef | grep -cw [i] nit
上記のいくつかは私には役に立たなかったが、それらはこれに向かう途中で私を助けた。
ps aux | grep [j]ava -c
Linuxの初心者向け:
ps aux
は現在実行中のすべてのプロセスを出力し、grep
はWordに一致するすべてのプロセスを検索しますJava、[]
ブラケットは実行したプロセスを削除するので、実行中のプロセスとして含まれず、最後に-c
オプションはcountを表します。
すべてのプロセス名をリストし、ソートしてカウントする
ps --no-headers -A -o comm | sort | uniq -c
Ttyに接続されたプロセスをリストすることもできます
ps --no-headers a -o comm | sort | uniq -c
次を使用してフィルタリングできます。
ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'
次のbashスクリプトはcronジョブとして実行できます。プロセスがフォークしすぎると、電子メールを受け取る可能性があります。
for i in `ps -A -o comm= --sort=+comm | uniq`;
do
if (( `ps -C $i --no-headers | wc -l` > 10 )); then
echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
fi
done
10を懸念の数に置き換えます。
TODO:「10」もコマンドラインパラメータとして渡すことができます。また、例外リストに入れることができるシステムプロセスはほとんどありません。
ps aux | wc -l
このコマンドは、すべてのユーザーがシステムで実行しているプロセスの数を表示します。
特定のユーザーに対して、次のコマンドを使用できます。
ps -u <username> | wc -l
実行する前に実際のユーザー名に置き換えてください:)
ps
(プロセスのスナップショットを表示します)をwc
(単語の数をカウントします、wc -l
オプションは行、つまり改行文字をカウントします)を使用できます。これは非常に簡単で覚えやすいものです。
ps -e | grep processName | wc -l
この単純なコマンドは、現在のサーバーで実行されているプロセスの数を出力します。現在のユーザーで現在のサーバーで実行されているプロセスの数を確認する場合は、ps
の-U
オプションを使用します。
ps -U root | grep processName | wc -l
ユーザー名でルートを変更します。
しかし、他の多くの回答で述べたように、ps -e | grep -c process_name
を使用することもできます。これはよりエレガントな方法です。