
プロセスがユーザーモードで費やす時間とカーネルを待つ時間を決定するために標準のLinux / Unixツールを使用する方法はありますか?
time
言い換えれば、を使用するときに得られるのは、「user」と「sys」の値です。期間プロセス実行時間?
メモ:1つの方法はWBEMを使用してLinux_UnixProcessを列挙することですが、その他このツールよりも私の目的は、WBEMプロバイダが私に言うこと、つまり他のツールを使用する必要があることを確認することです。
答え1
Linuxでは、この情報はフィールド14〜17にあります/proc/$pid/stat
(参照:工程(5)細部):
フィールドは次のとおりです。
- 14:ユーザー時間(時計のティック数)
- 15: システム時間
- 16: ユーザーが子供を待つ時間
- 17: 子供のシステム時間を待っている
(特定のプロセスのすべてのスレッドは同じ値を持ちます)
直接報告されませんps
。
ps
レポート14 + 15ps -o time
および14 + 15 + 16 + 17
。ps --cumulative -o bsdtime
の2番目のフィールドにはスペースや改行文字を含めることができるため、awk's、...を使用して解析することは/proc/$pid/stat
できません。$1
$2
次のように使用できますperl
。
$ perl -MPOSIX -l -0777 -ne '@f = /\(.*\)|\S+/gs;
printf "utime: %.2f\nstime: %.2f\ncutime: %.2f\ncstime: %.2f\n",
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