如何在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
答案 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