按名称查找进程ID

时间:2010-08-26 10:34:50

标签: 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

3 个答案:

答案 0 :(得分:8)

如何执行此操作取决于您的操作系统。假设Linux,您可以手动抓取/ proc文件系统并查找正确的命令行。然而,这与pgrep正在做的事情是一样的,并且实际上会使程序 less 可移植。

这样的事情可能有用。

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

小心翼翼地在/ proc。中寻找。

答案 1 :(得分:4)

快速谷歌搜索提出sys_proctable,这应该让你以便携的方式做到这一点。

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

答案 2 :(得分:1)

基于Debian的系统使用pidof命令查找pid。

使用ruby杀死进程函数:

def killPid(cmd)
   pid=exec("pidof #{cmd}")
   Process.kill "USR2", pid
end