开发者

How to use the S-output-modifier with Unix/Linux command ps?

The command

ps -o time -p 21361

works; however what I need is the running time of the process including all the children. For example, if 21361 is a bash script, which calls other scripts, then I want the total running time, including the running time of all children.

Now the ps documentation lists the "OUTPUT MODIFIER":

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.

Sounds just right. Unfortunately, there is no specification of the ps-syntax, so I have no clue where to place the "S"! For hours now I tried many combinations, but either I get syntax error开发者_运维百科s, or "S" makes nothing. And on the Internet you find only very basic information about ps (and always the same), specifically the "S" modifier I couldn't find mentioned anywhere, and also nobody ever explains the syntax of ps.


I am not sure, but it might be that ps is somewhat buggy in this respect. Try this here:

$ 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

This is using the BSD options for ps. It works on my machine, however you get an extra header row and extra columns. I would cut them away using tr and 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


On MacOS X (10.7, Lion) the manual page says:

-S Change the way the process time is calculated by summing all exited children to their parent process.

So, I was able to get output using:

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

However, that output was not really any different from when the '-S' option was omitted.

I tried:

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

As you can see, the 15 seconds of system time spent copying /dev/zero to /dev/null did not get included in the summary.

At this stage, the only way of working out what the '-S' option does, if anything, is to look at the source. You could look for sumrusage in the FreeBSD version, for example, at FreeBSD.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜