/rprocfs

An easy way to read process details from the proc filesystem

Primary LanguageRubyMIT LicenseMIT

rprocfs

A simple ruby lib for reading process details from the proc filesystem.

Install

Install the gem using rubygems and you are ready to go:

gem install rprocfs

Usage

require 'rubygems' # This is not needed for ruby > 1.8
require 'rprocfs'
  
puts "User time of the current process: #{RProcFS.utime($$)}"
puts "Current data memory size of the current process: #{RProcFS.data($$)}"

Example

Let's say you want to run a process and measure its user + system time. Here is how to do that:

require 'rubygems'
require 'rprocfs'

pid = fork do
  Kernel.exec ARGV.join(" ")
end

time = 0
begin
  # Sums the utime, stime, cutime and cstime of the process
  # utime - user time of the process
  # stime - system time of the process
  # cutime - the user time of the children of the process
  # cstime - the system time of the children of the process
  time = [:utime, :stime, :cutime, :cstime].map { |f| RProcFS.send f, pid }.inject(0) { |x,y| x + y }
  sleep 0.01
end until(Process.waitpid(pid, Process::WNOHANG))

puts "Time: %0.3f" % time

Docs

Currently the lib is not very well documented. More information you can get from "man proc". Currently the lib parses /proc/{pid}/stat and /proc/{pid}/statm. The names of the API is the same as the names in the manpage.

Portability

Currently this is tested only on ubuntu 9.04 system. It should work on most linux systems. Please file an issue if you find any problem.

Copyright

Copyright (c) 2009 Valentin Mihov. See LICENSE for details.