开发者

Measuring process statistics in Linux

开发者 https://www.devze.com 2022-12-21 23:12 出处:网络
I am building programming contest software. A user\'s program is received by our judging system and is evaluated by compiling it and running it via a fork() and exec(). The parent process waits for th

I am building programming contest software. A user's program is received by our judging system and is evaluated by compiling it and running it via a fork() and exec(). The parent process waits for the child (submission's process) to exit, and then cleans it up.

To giv开发者_如何学JAVAe useful information about the program's run, I want to measure the CPU time and peak memory used by the program. Does the Linux kernel keep track of these values? Is there any other way to get this information?


If you call the wait4() system call to reap the child when it finishes, it will fill out a struct rusage structure with the resource usage of the child (ru_utime and ru_stime hold the user and system CPU time used by the child respectively).


You can use the getrusage() or acct() (more info here) syscalls


A low-tech (but easy) solution is to dump the output of top in batch mode periodically and parse it afterwards.


The time(1) program may help, i guess. It is much simpler than polling top.

An excerpt from the man page:

   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).


You can check the top command. That might be of some help.

0

精彩评论

暂无评论...
验证码 换一张
取 消