I want to programmatically [in C] calculate CPU usage % for a given process ID in Linux.
How can we get the realtime CPU usage % for a given process?
To make it further clear:
- I should be able to determine the CPU usage for the provided processid or process.
- The process need not be the child process.
- I want the solution in 'C' language.
I think it's worth looking at GNU "time" command source code. time It outputs user/system cpu time along with real elapsed time. It calls wait3/wait4 system call (if available) and otherwise it calls times system call. wait* system call returns a "rusage" struct variable and times system call returns "tms". Also, you can have a look at getrusage system call which also return very interesting timing information. time
easy step to step for nubs like me :)
read the first line of /proc/stat to get total_cpu_usage1
read /proc/pid/stat where pid is the pid of the process you want to know the cpu usage, like this:
now sum usertime and system time and get proc_times1
now wait 1 second or more
do it again, and get total_cpu_usage2 and proc_times2
the formula is:
you can get the num of cpus from /proc/cpuinfo
getrusage() can help you in determining the usage of current process or its child
Update: I can't remember an API. But all details will be in /proc/PID/stat, so if we could parse it, we can get the percentage.
EDIT: Since CPU % is not straight forward to calculate, You could use sampling kind of stuff here. Read ctime and utime for a PID at a point in time and read the same values again after 1 sec. Find the difference and divide by hundred. You will get utilization for that process for past one second.
(might get more complex if there are many processors)
Take a look at the "pidstat" command, sounds like exactly what you require.
Install
psacct
oracct
package. Then use thesa
command to display CPU time used for various commands. sa man pageA nice howto from the nixCraft site.
This is my solution...