System Resource Usage

Kevin Bealer kevinbealer at gmail.com
Sat Jan 27 23:21:04 PST 2007


Mmcdermo wrote:
> Hi there,
>   I'm working on a function that determines what percentage of basic 
> resources (CPU, memory, etc) the calling application is using (on *NIX, 
> but eventually for windows as well). So far the best solution I've come 
> up with is to use the ps utility, but I'm not sure what method I should 
> use to retrieve the output. I could have it output to file or pipe the 
> output somewhere, but all of this seems extremely awkward for such a 
> simple task. Are there some libraries out there that could assist me 
> with this, or is there at least a simple way to retrieve the output from 
>  ps?
> 
>  Thank you very much for your time,
>   ~Morgan McDermott

You can run ps via fork / exec and parse the output, the way a shell 
script would, but a less messy solution would be to determine how ps 
works and do the same thing.  You can tell exactly what ps does using 
the "strace" command.

But for recent versions of Linux I think utilities like 'top' and 'ps' 
use the /proc filesystem.  For example, if you want to know the virtual 
memory size of a process, you can read /proc/12345/status, and look for 
"VmSize".  That is for PID 12345, you can also use "/proc/self/status" 
for the current process -- it returns the data for which ever process is 
reading the file (the kernel knows all).

This can be parsed, but there is a bad interaction between std.file and 
a lot of the files in /proc because Linux reports the filesize as zero 
even if it is readable --- it's not really 'data', when you read the 
file the linux kernel just does a "printf" into a buffer and returns 
this to your process.  So I think you need to use Stream instead of 
std.file for these pseudo-files.

The other trick is figuring out what all these numbers mean; I suggest 
Google for this, since I imagine its documented ... somewhere.

Kevin


More information about the Digitalmars-d-learn mailing list