GNU/Linux >> Linux の 問題 >  >> Linux

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

標準の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

Linux
  1. 実行中のプロセスの環境を変更しますか?

  2. Linux –ユーザースペースとカーネルスペースの違いは?

  3. 新しいカーネルがインストールされるたびにスクリプトを実行しますか?

  1. Linux プロセスの状態

  2. プロセスが実行されているかどうかを確認し、結果に基づいて処理する Linux スクリプト

  3. コピーと chmod/chown を同時に行う

  1. 非プリエンプティブ、プリエンプティブ、セレクティブ プリエンプティブ カーネルの違いは何ですか?

  2. 実行中のプロセスのウォールクロック時間を取得するにはどうすればよいですか?

  3. NGinx と PHP はどのユーザーとして実行する必要がありますか?