2

コマンド

ps -o time -p 21361

動作します。ただし、必要なのは、すべての子を含むプロセスの実行時間です。たとえば、21361 が他のスクリプトを呼び出す bash スクリプトである場合、すべての子の実行時間を含む合計実行時間が必要です。

現在、ps ドキュメントには「出力修飾子」がリストされています。

S

Sum up some information, such as CPU usage, from dead child processes into their parent. This is useful for examining a system where a parent process repeatedly forks off short-lived children to do work.

ちょうどいいですね。残念ながら、ps-syntax の仕様がないため、"S" をどこに配置すればよいかわかりません。何時間もの間、私は多くの組み合わせを試しましたが、構文エラーが発生するか、「S」は何もしません。そして、インターネット上では、ps に関する非常に基本的な情報 (そして常に同じ) しか見つかりません。具体的には、どこにも言及されていない "S" 修飾子があり、ps の構文についても誰も説明していません。

4

2 に答える 2

2

よくわかりませんが、この点で ps に多少のバグがある可能性があります。ここでこれを試してください:

$ ps p 12104 k time
PID TTY      STAT   TIME COMMAND
12104 ?        Ss    16:17 /usr/sbin/apache2 -k start

$ ps p 12104 k time S
PID TTY      STAT   TIME COMMAND
12104 ?        Ss   143:16 /usr/sbin/apache2 -k start

これは ps の BSD オプションを使用しています。私のマシンでは動作しますが、追加のヘッダー行と追加の列が表示されます。tr と cut を使用してそれらを切り取ります。

$ ps p 12104 k time S | tail -n 1 | tr -s '[:space:]' | cut -d ' ' -f 4
143:39
$ ps p 12104 k time | tail -n 1 | tr -s '[:space:]' | cut -d ' ' -f 4
16:17
于 2011-08-14T15:34:28.783 に答える
0

MacOS X (10.7、Lion) のマニュアル ページには次のように記載されています。

-S 終了したすべての子を親プロセスに合計することによって、プロセス時間の計算方法を変更します。

したがって、次を使用して出力を取得できました。

$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.12 01-18:31:07   305
$

ただし、その出力は、' -S' オプションを省略した場合と実際には何の違いもありませんでした。

私は試した:

$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.14 01-18:43:59   305
$ time dd if=/dev/zero of=/dev/null bs=1m count=100k
102400+0 records in
102400+0 records out
107374182400 bytes transferred in 15.374440 secs (6983941055 bytes/sec)

real    0m15.379s
user    0m0.056s
sys     0m15.034s
$ ps -S -o time,etime,pid -p 305
     TIME     ELAPSED   PID
  0:00.14 01-18:44:15   305
$

ご覧のとおり、コピー/dev/zeroに費やされた 15 秒間のシステム時間/dev/nullは概要に含まれていません。

この段階で、' -S' オプションが何をするかを理解する唯一の方法は、ソースを調べることです。sumrusageたとえば、FreeBSD で FreeBSD バージョンを探すことができます。

于 2011-08-14T16:42:19.627 に答える