#! /usr/bin/ruby require 'optparse' pids = nil OptionParser.new do |opts| opts.banner = "Usage: ruby #{$PROGRAM_NAME} [options]" opts.on("-p pid", "--pid", "PID to inspect"){ |pid| pids=pid } opts.on( '-h', '--help', 'Display this screen' ) do puts opts exit end end.parse! if pids.nil? && ARGV.empty? puts "Usage: ruby #{$PROGRAM_NAME} process_name" # $0 exit end if pids.nil? pids = `pgrep #{ARGV[0]}`.split("\n").map(&:to_i) end total_mem = 0 total_cpu = 0 [*pids].each do |pid| data = `ps u -p #{pid}`.split("\n")[1].split(' ') total_mem += data[3].to_f total_cpu += data[2].to_f puts "========" puts "Process Name: #{data[10]}" puts "\tCPU usage: #{data[2]}%" puts "\tMemory usage: #{data[3]}% - #{data[5]}kB\n" end if [*pids].size > 1 puts "Total:" puts "\tCPU usage: #{total_cpu}%" puts "\tMemory usage: #{total_mem}%" end
ex0ns