class Headless::CliUtil
Public Class Methods
application_exists?(app)
click to toggle source
# File lib/headless/cli_util.rb, line 3 def self.application_exists?(app) !!path_to(app) end
ensure_application_exists!(app, error_message)
click to toggle source
# File lib/headless/cli_util.rb, line 7 def self.ensure_application_exists!(app, error_message) if !self.application_exists?(app) raise Headless::Exception.new(error_message) end end
fork_process(command, pid_filename, log_filename='/dev/null')
click to toggle source
# File lib/headless/cli_util.rb, line 42 def self.fork_process(command, pid_filename, log_filename='/dev/null') pid = Process.spawn(command, err: log_filename) File.open pid_filename, 'w' do |f| f.puts pid end end
kill_process(pid_filename, options={})
click to toggle source
# File lib/headless/cli_util.rb, line 49 def self.kill_process(pid_filename, options={}) if pid = read_pid(pid_filename) begin Process.kill 'TERM', pid Process.wait pid if options[:wait] rescue Errno::ESRCH # no such process; assume it's already killed rescue Errno::ECHILD # Process.wait tried to wait on a dead process end end unless options[:preserve_pid_file] begin FileUtils.rm pid_filename rescue Errno::ENOENT # pid file already removed end end end
path_to(app)
click to toggle source
Credit: stackoverflow.com/a/5471032/6678
# File lib/headless/cli_util.rb, line 14 def self.path_to(app) exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| exts.each { |ext| exe = File.join(path, "#{app}#{ext}") return exe if File.executable?(exe) && !File.directory?(exe) } end return nil end
process_mine?(pid)
click to toggle source
# File lib/headless/cli_util.rb, line 25 def self.process_mine?(pid) Process.kill(0, pid) && true rescue Errno::EPERM, Errno::ESRCH false end
process_running?(pid)
click to toggle source
# File lib/headless/cli_util.rb, line 31 def self.process_running?(pid) Process.getpgid(pid) && true rescue Errno::ESRCH false end
read_pid(pid_filename)
click to toggle source
# File lib/headless/cli_util.rb, line 37 def self.read_pid(pid_filename) pid = (File.read(pid_filename) rescue "").strip pid.empty? ? nil : pid.to_i end