実行中のプロセスのユーザーとカーネル時間を取得しますか?

実行中のプロセスのユーザーとカーネル時間を取得しますか?

プロセスがユーザーモードで費やす時間とカーネルを待つ時間を決定するために標準の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 + 17ps --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

おすすめ記事