好的,我有一个编程任务(是的,我们都可以转向我们认为适合帮助的任何来源)我必须找出进程花费阻塞/休眠/运行的时间。
我的第一次尝试是创建一个bash脚本......看起来像这样:
for i in `ls /proc/ | egrep [0-9]+`
do
cat /proc/$i/status | grep State
done
然后所有问题都报告了睡眠状态。另外这种方法需要我疯狂地进行调查......所以运行测试可能会改变结果......(呃)
现在用syscalls编译一个新版本的linux或者一种跟踪进程状态的方法并不是不可能的。我唯一担心的是试图找出如何跟踪不断变化的过程状态,并确保我不会错过任何东西......
答案 0 :(得分:0)
您可以使用'时间'
$ time ls /usr/bin
real 0m4.756s
user 0m0.051s
sys 0m0.078s
real - sys =等待I / O(休眠/阻塞)的总时间
sys - user =系统调用花费的时间
user =仅在程序中执行指令所花费的时间(可能包括动态链接开销,不确定)
答案 1 :(得分:0)
如果您想获取当前存在的事物的最新统计信息...
ps -Ae pid,comm,state,time,etime
-A用于所有进程,-e用于自定义输出(仅pid,命令,状态,时间(CPU时间),经过时间)
假设问题正在处理所有流程(包括已完成的流程),则将需要某种审核守护程序来监视流程并在完成时获取该信息。