/proc/<PID>/stat
からのデータを解析する必要があります .これらは最初のいくつかのフィールドです (Documentation/filesystems/proc.txt
から) カーネルソースで):
Table 1-3: Contents of the stat files (as of 2.6.22-rc3)
..............................................................................
Field Content
pid process id
tcomm filename of the executable
state state (R is running, S is sleeping, D is sleeping in an
uninterruptible wait, Z is zombie, T is traced or stopped)
ppid process id of the parent process
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flags
min_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
utime user mode jiffies
stime kernel mode jiffies
cutime user mode jiffies with child's
cstime kernel mode jiffies with child's
あなたはおそらく utime
の後です および/または stime
. cpu
も読む必要があります /proc/stat
からの行 、次のようになります:
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
これは、さまざまなカテゴリで使用された累積 CPU 時間を jiffy 単位で示します。 time_total
を取得するには、この行の値の合計を取る必要があります
utime
の両方を読む と stime
興味のあるプロセスについて、time_total
を読んでください。 /proc/stat
から .それから 1 秒ほど寝てから、すべてをもう一度読みます。以下を使用して、サンプリング時間中のプロセスの CPU 使用率を計算できるようになりました。
user_util = 100 * (utime_after - utime_before) / (time_total_after - time_total_before);
sys_util = 100 * (stime_after - stime_before) / (time_total_after - time_total_before);
理にかなっていますか?
getrusage() は、現在のプロセスまたはその子プロセスの使用状況を判断するのに役立ちます
更新: API が思い浮かびません。ただし、すべての詳細は /proc/PID にあります /stat なので、解析できればパーセンテージを取得できます。
編集: CPU % の計算は簡単ではないため、ここではサンプリングのようなものを使用できます。ある時点で PID の ctime と utime を読み取り、1 秒後に同じ値を再度読み取ります。差を見つけて百で割ります。過去 1 秒間、そのプロセスの使用率が得られます。
(プロセッサが多数ある場合は、より複雑になる可能性があります)