6

好的,所以对于我的编程任务(是的,我们都可以求助于我们认为合适的任何资源)我必须找出进程花费了多少时间阻塞/睡眠/运行。

我的第一次尝试是创建一个 bash 脚本......看起来像这样:

for i in `ls /proc/ | egrep [0-9]+`
do
        cat /proc/$i/status | grep State
done

但随后所有的问题都在报告睡眠状态。再加上这种方法会要求我像疯了一样投票......所以运行测试可能会改变结果......(呃)

现在,使用系统调用或跟踪进程状态的方法来编译新版本的 linux 并非不可能。我唯一担心的是试图找出如何跟踪不断变化的进程状态并确保我不会错过任何东西......

4

2 回答 2

0

您可以使用“时间”

 $ time ls /usr/bin

 real    0m4.756s
 user    0m0.051s
 sys     0m0.078s

real - sys = 等待 I/O 的总时间(休眠/阻塞)

sys - user = 花费在系统调用上的时间

用户=仅在程序中执行指令所花费的时间(可能包括动态链接开销,对此不确定)

于 2009-05-02T00:47:43.220 回答
0

如果您想获取当前存在的事物的当前统计信息...

ps -Ae pid,comm,state,time,etime

-A 用于所有进程,-e 用于自定义输出(只是 pid、命令、状态、时间(CPU 时间)、经过的时间)

假设问题是处理所有进程(包括已完成的进程),这将需要某种审计守护进程来监视进程并在完成时获取该信息。

于 2018-11-27T20:15:08.983 回答