2011-08-14 6 views
1

コマンドUnix/LinuxコマンドpsでS-output-modifierを使用するには?

ps -o time -p 21361 

作品。しかし私が必要とするのは、プロセスの実行時間です。すべて 子供です。たとえば、21361が他のスクリプトを呼び出すbashスクリプトの場合、 すべての子の実行時間を含めて、合計実行時間が必要です。

今PSのドキュメントは、 "OUTPUT修飾子" 一覧表示されます:

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構文の指定はありませんので、 私は "S"を配置する手がかりがありません!数時間の間、私は多くの組み合わせを試しましたが、 のどちらかに構文エラーがあるか、「S」が何もしません。そして、インターネット上では、 の基本的な情報はps(と常に同じ)、具体的には "S"修飾子 どこでも言及されていませんでした。

+0

親プロセスはそれらの中で最も長い実行プロセスではありませんか?あなたは故意にchildernの処理時間を「二重計算」していますか?がんばろう。 – shellter

答えて

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を使用して、それらを離れてカットし、カットします:

$ 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 
+2

ありがとう!!私は、psは間違いなくバグです:あなたのコンビネーションは結果を達成するための唯一の**と思われます---それ以外のものは同等であるかより強力でなければならない(余分な出力をカットするなど) –

+2

ようこそ。私やジョナサンの答えがあなたの質問を満たしていれば、答えとしてマークすることを忘れないでください。 – Arne

0

のMacOS X(10.7、ライオン)にマニュアルページは言う:

-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/null/dev/zeroをコピー費やしたシステム時刻の15秒は、要約には含まれませんでした。

この段階では、「-S」オプションが何かを実行する唯一の方法は、ソースを見ることです。あなたはsumrusageをFreeBSDのバージョンで探すことができます。例えば、FreeBSDです。

関連する問題