【发布时间】:2011-07-08 19:54:13
【问题描述】:
我正在尝试做的事情的简短摘要:
模拟一个shell程序,当用户在自己的进程中输入命令时执行命令,每个进程完成后,输出所有子进程和shell在CPU上花费的总时间,以及最大内存量使用了一个进程。
创建 shell 和执行命令不是问题,但在跟踪有关进程的统计数据时,我却陷入了困境。
为了跟踪 CPU 时间,我打算使用 time 系统调用并将用户的命令通过 shell 传递到 time 中,这样进程就可以完成运行,并且在执行结束时我会得到 time 的信息可供我使用。但是当谈到获取 shell(当前程序)在 CPU 上花费的时间时,我不完全确定该怎么做,因为我看到或遇到的每个时间实现都使用上述传递命令和参数转换为时间,而我不能用 shell 做到这一点。我目前唯一的想法是让 shell 也成为子进程,通过时间运行,当 shell 完成运行子进程时,重新启动 shell,从时间中提取信息,然后重新启动 shell。这看起来很圆,但我找不到任何系统调用来做我想做的事。
至于内存使用情况,我在考虑使用top然后将信息拉出来,但是iirc top只监控当前内存使用情况,而不是总量。我唯一能想到的另一件事就是进入 /proc// 并尝试从那里的某个地方提取信息。再一次,似乎很迂回。
任何朝着正确方向轻推都会很棒。所有这些都是在 C 中完成的,如果这有所作为的话。
【问题讨论】:
-
您是否考虑过查看
top的来源以了解它是如何进行跟踪的? -
strace -c和ltrace -c应该会给你一个好主意
标签: c linux shell memory-management cpu-usage