2011-08-14 28 views
1

命令如何在Unix/Linux命令ps中使用S输出修饰符?

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语法的规范,所以 我不知道在哪里放置“S”!现在几个小时,我尝试了很多组合,但是 或者我得到语法错误,或者“S”什么都不做。而在互联网上你只能找到 有关ps的基本信息(总是相同的),特别是“S”修饰符 我在任何地方都找不到,也没人解释ps的语法。

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

正如你所看到的,系统时间采用15秒的花复制/dev/zero/dev/null没有得到列入摘要。

在这个阶段,找出'-S'选项的唯一方法就是查看源代码。您可以在FreeBSD版本中查找sumrusage,例如,在FreeBSD

相关问题