標準のLinux/Unixツールを使用して、プロセスがユーザーモードで費やした量と、カーネルを待機している量を判断する方法はありますか?
つまり、time
を使用したときに取得する「user」と「sys」の値が正確にわかります。 、ただし中 プロセスランタイム?
注: 1つの方法は、WBEMを使用してLinux_UnixProcessを列挙することですが、 otherを使用する必要があります。 これよりもツール。私の目的は、WBEMプロバイダーからの指示を確認することです。つまり、別のツールを使用する必要があります。
承認された回答:
Linuxでは、情報は/proc/$pid/stat
のフィールド14〜17で利用できます。 (詳細については、proc(5)を参照してください):
フィールドは次のとおりです:
- 14:ユーザー時間(クロックティック数)
- 15:システム時間
- 16:子供を待っているユーザー時間
- 17:子供を待っているsys時間
(特定のプロセスのすべてのスレッドは同じ値を持っています)
ps
によって直接報告されることはありません 。
ps
ps -o time
で14+15を報告します および14 + 15 + 16 + 17
ps --cumulative -o bsdtime
を使用 。
/proc/$pid/stat
の2番目のフィールドに注意してください スペースや改行文字が含まれている可能性があるため、awkの$1
で解析することはできません。 、$2
…
perl
を使用できます のように:
$ perl -MPOSIX -l -0777 -ne '@f = /(.*)|S+/gs;
printf "utime: %.2fnstime: %.2fncutime: %.2fncstime: %.2fn",
map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27
プロセスは、getrusage(RUSAGE_SELF)
を使用して独自の時間を取得できます およびgetrusage(RUSAGE_CHILDREN)
。
times
もあります 同じ情報を取得するシステムコール。 POSIXシェルにはtimes
があります そのための組み込み。一部のシェルは、time
でその情報も提供します (引数なし)。
$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s
$ ps -o time -p "$$"
TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
TIME
1:36