Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
# frozen_string_literal: true
module Facter
module Util
module Linux
def self.process_running?(process_name)
pidfiles = Dir.glob("{/run,/var/run}/#{process_name}{,*,/}*.pid")
pidfiles.each do |pf|
next unless File.file?(pf)
pid = begin
Integer(Facter::Util::FileHelper.safe_read(pf, '').strip, 10)
rescue StandardError
nil
end
next unless pid&.positive?
begin
# Doesn't actually kill, just detects if the process exists
Process.kill(0, pid)
return true if proc_comm(pid) == process_name || proc_cmdline(pid)&.match?(%r{(^|\s|/)#{process_name}(\s|$)})
rescue Errno::ESRCH
# If we can't confirm identity, still treat it as not running to be safe.
next
rescue Errno::EPERM
# Exists but we can't inspect it; assume it's running.
return true
end
end
# Fallback: Try to find it in /proc
return false unless Dir.exist?('/proc')
Dir.glob('/proc/[0-9]*/comm').any? do |path|
Facter::Util::FileHelper.safe_read(path, nil)&.strip == process_name
end
end
def self.proc_comm(pid)
Facter::Util::FileHelper.safe_read("/proc/#{pid}/comm", nil)&.strip
end
def self.proc_cmdline(pid)
raw = Facter::Util::FileHelper.safe_read("/proc/#{pid}/cmdline", nil)
raw&.tr("\0", ' ')
end
end
end
end