按名称查找进程ID

Joe*_*oel 7 ruby unix

如何在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)

Abo*_*uby 9

如何执行此操作取决于您的操作系统.假设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中.

  • 是的,我说过"假设Linux". (4认同)

Has*_*kun 5

一个快速的谷歌搜索提出了sys_proctable,它应该让你以一种可移植的方式做到这一点。

免责声明:我不使用 Ruby,无法确认这是否有效。