Skip to content

Instantly share code, notes, and snippets.

@wulftone
Last active December 16, 2015 15:29
Show Gist options
  • Save wulftone/5455976 to your computer and use it in GitHub Desktop.
Save wulftone/5455976 to your computer and use it in GitHub Desktop.
Monitor some random process by current user and process name and notify when it is complete
#!/usr/bin/env ruby
# Usage:
#
# ./mon git 0.3 # => will monitor "git" every 0.3 seconds until it dies
start = Time.now
user = `whoami`.strip
name = ARGV[0]
frequency = (ARGV[1] || 1).to_f # Default to 1 second if second argument not given
def elapsed_time start
finish = Time.now
diff = finish - start
seconds = diff.to_i
minutes = (seconds / 60).to_i
hours = (minutes / 60).to_i
["%02d" % hours, "%02d" % (minutes % 60), "%02d" % (seconds % 60)]
end
if name
puts "\nMonitoring via `ps -U #{user} | grep #{name}`\n"
puts "Type ctrl+c to exit early.\n\n"
loop do
ps = `ps -U #{user} | grep #{name}`
elapsed = elapsed_time start
print "#{name} running... Time elapsed: #{elapsed[0]}:#{elapsed[1]}:#{elapsed[2]}\r"
$stdout.flush
if ps.empty?
puts "\nFinished at #{Time.now}."
`notify-send "#{name} is done!"`
break
end
sleep frequency
end
else
puts 'You need to supply a program-name to monitor, e.g `./mon git`'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment