class Sapristi::Linux::ProcessManager

Public Class Methods

cmd_for_pid(pid) click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 36
def self.cmd_for_pid(pid)
  cmd = "ps -o cmd -p #{pid}"
  line = `#{cmd}`.split("\n")[1]
  raise Error, "No process found pid=#{pid}" unless line

  line
end
execute_and_detach(cmd, out, err) click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 6
def self.execute_and_detach(cmd, out, err)
  write_log_headers(out, err, cmd)
  process_pid = begin
    Process.spawn(cmd, out: [out, 'a'], err: [err, 'a'], pgroup: Process.getpgrp)
  rescue StandardError
    raise Error, "Error executing process: #{$ERROR_INFO}"
  end
  ::Sapristi.logger.info "Launch #{cmd.split[0]}, process=#{process_pid} pgroup=#{Process.getpgrp}"
  Process.detach process_pid
end
kill(waiter) click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 25
def self.kill(waiter)
  Process.kill 'KILL', waiter.pid
  # sleep 1 # XLIB error for op code
  raise Error, 'Error executing process, it didn\'t open a window'
end
user_pids() click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 31
def self.user_pids
  user_id = `id -u`.strip
  `ps -u #{user_id}`.split("\n")[1..nil].map(&:to_i)
end
write_header(file_name, header) click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 21
def self.write_header(file_name, header)
  File.open(file_name, 'a') { |file| file.write "\n\n#{header}\n" }
end
write_log_headers(out, err, header) click to toggle source
# File lib/sapristi/adapters/linux/process_manager.rb, line 17
def self.write_log_headers(out, err, header)
  [out, err].each { |file_name| write_header(file_name, header) }
end