プロセスの「時間」を定期的に表示

プロセスの「時間」を定期的に表示

1週間前、私は次のシミュレーションを始めました。

make rebuild; time make run

私はこのコマンドを使用して、time各ケースで使用されたCPU時間を記録しました。

1週間後にシミュレーションが完了し、驚くべきことに時間統計は表示されませんでした。目標はmake run基本的に次のとおりです。

python SCRIPTNAME | tee SCRIPTNAME.log

実際、最後の4〜5回の反復(10000)に対応する出力が見つかりません。画面には表示されず、ログファイルにも追加されません.)

私の質問は次のとおりです

  1. どうすればいいですか?

  2. time私が説明した状況でシミュレーション全体を再実行する必要がないように、定期的に時間統計を表示できますか?

ベストアンサー1

出力はtimestderrに表示されます。したがって、出力をログファイルにキャプチャするには、stderrをリダイレクトする必要があります。

zshしかし、like inkshではtimeキーワードであることに注意してください。

time cmd 2>&1 |  tee log

実際に移流 cmd 2>&1 | tee log(そして両方cmdの合計tee)。タイミングを合わせてcmdstdoutとstderrcmdtime出力をパイプにリダイレクトするには、tee次のものが必要です。

{ time cmd; } 2>&1 | tee log

定期的な検索は不可能だと思います。これはカーネルによって計算され、親プロセスが終了した後に親プロセスで使用できます。ちょっと()ed対応するサブアイテム(使用getrusage()

timeまた、親が待っていない孫の利用は、届出init時点で死亡した場合でも集計されません(実際に集計されます)。

プロセスは私自身time使用情報(例:alone inの出力を参照zsh)。ただし、このchildrenセクションでは、直系の子供が死亡して使用量を報告したときにのみ増加するため、makeバックグラウンドで開始してtime定期的に実行を終了する子孫が増加します。 (表示されたカーネル)はこれらのサブキーの使用量を計算し、累積使用量は戻り時にのみ使用できます。childrenmakemakemakezshmake

CPU時間だけに興味があり、getrusage()変更後に追跡および報告される他の情報に興味がない場合、Linuxではtime$TIMEFMT/proc/pid/stat以下から情報といくつかの要約を得ることができます。psしかし、それは子供のため特定のプロセスに対して終了した直系サブプロセスの累積使用量のみが含まれます。

それは次のとおりです。

time cmd &
perl -MPOSIX -l -0777 -e '
  while (<STDIN>) {
    @f = /\(.*\)|\S+/gs;
    printf "%s %s cutime: %.2f cstime: %.2f\n",
      strftime("%T",localtime), $f[1],
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[15,16];
    sleep 1;
    seek STDIN,0,0;
  }' < /proc/$!/stat

実行プロセスの各直系サブプロセスが終了して終了した場合にのみ、cutime(累積ユーザー時間)および(システム)インクリメントが表示されます。cstimecmdcmd待つそれらのため。

出力例はzsh -c 'repeat 5 {head -c200M /dev/zero | pixz > /dev/null}'次のとおりです。cmd:

15:19:32 (zsh) cutime: 0.00 cstime: 0.00
15:19:33 (zsh) cutime: 0.00 cstime: 0.00
15:19:34 (zsh) cutime: 0.05 cstime: 0.25
15:19:35 (zsh) cutime: 0.05 cstime: 0.25
15:19:36 (zsh) cutime: 19.21 cstime: 1.04
15:19:37 (zsh) cutime: 19.21 cstime: 1.04
15:19:38 (zsh) cutime: 19.21 cstime: 1.04
15:19:39 (zsh) cutime: 19.26 cstime: 1.31
15:19:40 (zsh) cutime: 37.94 cstime: 2.05
15:19:41 (zsh) cutime: 37.94 cstime: 2.05
15:19:42 (zsh) cutime: 37.97 cstime: 2.36
15:19:43 (zsh) cutime: 37.97 cstime: 2.36
15:19:44 (zsh) cutime: 57.17 cstime: 3.07
15:19:45 (zsh) cutime: 57.17 cstime: 3.07
15:19:46 (zsh) cutime: 57.22 cstime: 3.36
15:19:47 (zsh) cutime: 76.06 cstime: 4.10
15:19:48 (zsh) cutime: 76.06 cstime: 4.10
15:19:49 (zsh) cutime: 76.06 cstime: 4.10
15:19:50 (zsh) cutime: 76.08 cstime: 4.42

時間の配置が増加することがわかります(プロセスが終了する時期headと時期)。pigz

おすすめ記事