如何在Ruby中找到名称或完整命令行的pid,而无需调用外部可执行文件?
我将SIGUSR2发送到其命令行包含的进程ruby job.rb.我想在没有调用的情况下执行以下操作pgrep:
uid = Process.uid
pid = `pgrep -f "ruby job.rb" -u #{uid}`.split("\n").first.to_i
Process.kill "USR2", pid
Run Code Online (Sandbox Code Playgroud)
如何执行此操作取决于您的操作系统.假设Linux,您可以手动抓取/ proc文件系统并查找正确的命令行.然而,这是p纤ep是做同样的事情,实际上使程序少便携.
这样的事可能有用.
def get_pid(cmd)
Dir['/proc/[0-9]*/cmdline'].each do|p|
if File.read(p) == cmd
Process.kill( "USR2", p.split('/')[1] )
end
end
end
Run Code Online (Sandbox Code Playgroud)
小心一点,在/ proc中.