web-dev-qa-db-ja.com

システム内のスリープ状態のプロセスの数をカウントするにはどうすればよいですか?

シェルスクリプトを使用して、スリープ状態のプロセスの数をカウントするにはどうすればよいですか?

7
aeomey amani

詳細な説明...宿題だからすべてを取り入れると信じて...

psコマンドを使用してプロセスを一覧表示する

$ ps
  PID TTY          TIME CMD
 4879 pts/3    00:00:00 bash
 5003 pts/3    00:00:00 ps

ああ、これは現在のセッションのプロセスのみを示しています。システム内のすべてのプロセスを表示します。そのために-eフラグを使用できます

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:05 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
[and many more lines]

しかし、どのものが眠っているのかをどのように示しますか?

-lオプションまたはuオプションを使用できます。これにより、プロセスの状態を含む詳細が表示されます。スリープ状態のプロセスには、STAT列にSまたはDという文字があります

man psから

プロセス状態コードプロセスの状態を説明するためにs、statおよびstate出力指定子(ヘッダー「STAT」または「S」)が表示するさまざまな値を以下に示します。

           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

ps出力をフォーマットして、状態のみを表示し、簡単にカウントできるようにすることができます。

ps -e -o state

ここでは、-eを使用してすべてのプロセスと-oフラグを取得し、その後に必要な出力のタイプを続けます。このコマンドは状態文字のみを出力します。次に、この出力をgrepにパイプ(|を使用)して、スリーププロセスであるSまたはDの行をカウントできます。

ps -e -o state | grep -cE 'S|D'

grepはテキストを検索します。 -cオプションは、見つかったテキスト自体を出力するのではなく、一致のみをカウントするように指示します。 -Eオプションは、拡張正規表現を使用するようgrepに指示するため、|文字を使用して、式= thing|stuffを使用して、thing OR stuffに一致させることができます。正規表現を使用する場合は、単一引用符を使用して、シェルによる展開を防ぎます。

8
Zanna

psコマンドが、スリーププロセスのステータスを、割り込み可能なスリープのSおよび割り込み不可能なスリープのDとして出力することを知っていれば非常に簡単です。また、-o sフラグを使用してそれらの状態。あとは、grepを介して出力を実行するだけで、これらのフラグの発生をカウントします。そのようです:

$ ps -e -o s | grep -o 'S\|D' -c                                                                                         
260
5

別の方法は、次を使用して各状態のプロセス数をリストすることです。

$ ps -e -o state | sort | uniq -c
  1 R
141 S
1
Pete Escalante

topユーティリティは、実行中のタスク数とスリープ中のタスク数を示すタスク数を提供します。もちろん、それは時々刻々と変化しますが、これらのワンライナーの出力も変化します。他の* nixユーティリティと同様に、manページに詳細が表示されます。

0
DukeW