我正在构建编程竞赛软件。用户的程序由我们的判断系统接收,并通过编译并通过fork()和exec()运行来评估。父进程等待子进程(提交进程)退出,然后清除它。
为了提供有关程序运行的有用信息,我想测量程序使用的CPU时间和峰值内存。 Linux内核是否跟踪这些值?有没有其他方法可以获得这些信息?
答案 0 :(得分:6)
如果您在完成后调用wait4()
系统调用来收割孩子,它将填充struct rusage
结构,其中包含子项的资源使用情况(ru_utime
和{{1分别保存子项使用的用户和系统CPU时间。)
答案 1 :(得分:5)
您可以使用getrusage()
或acct()
(more info here)系统调用
答案 2 :(得分:0)
低技术(但简单)的解决方案是定期以批处理模式转储top
的输出并在之后解析它。
答案 3 :(得分:0)
我想,时间(1)计划可能有所帮助。它比民意调查简单得多。
摘自该手册页:
Disregarding the
name of the utility, GNU makes it output lots of useful information,
not only about time used, but also on other resources like memory, I/O
and IPC calls (where available).
答案 4 :(得分:-1)
您可以查看top命令。这可能会有所帮助。