I'd like to be able to get the CPU usage of a particular process.
What are my options for doing so from Ruby?
I've found the libgtop ruby binding, and I could use that, but I would
rather not bring in another dependency. This will run on Linux
systems only.
And would I want to use the elapsed real cpu time? Or the sum of the
elapsed user and system cpu time? (and then I believe I divide that
by the elapsed wall clock time)
Thanks,
Joe
man proc, look for "/proc/[number]/stat"
It contains a set of times spent by the process and its children.
it also contains the starttime, so this should allow you to compute "Cpu
usage of the process".
Hth,
Kero.
+--- Kero ---------------------------------- kero@chello@nl ---+
| The last good thing written in C++ was the Pachelbel Canon |
| Jerry Olson |
+--- M38c ------------ http://members.chello.nl/k.vangelder ---+
Thanks, I'm aware of /procproc.
I want to be able to constantly keep the user updated on how much of
the cpu the application is using.
Would I take the sum of the elapsed user and system cpu time and
divide that by the elapsed wall clock time to get the current cpu
percentage?
And one other question, does anyone know how I might do this on
Windows via Ruby?
this seems tto work ok on a process name but.. not sure how to do it on an id..
wscript.exe test.vbs
-------test.vbs-------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
set PerfProcess = objWMIService.Get(_
"Win32_PerfFormattedData_PerfProc_Process.Name='Idle'")
While (True)
PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime
Wscript.Sleep 1000
Wend
--------/test.vbs--------
That's what I would start with.
Then you'll want to remember values of 'some time ago' so you can do the
computation 'over the last some-time', as well as 'from the start of the
process'.