代码之家  ›  专栏  ›  技术社区  ›  Joel

按名称查找进程ID

  •  7
  • Joel  · 技术社区  · 15 年前

    如何在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 回复  |  直到 10 年前
        1
  •  4
  •   Michael Berkowski    11 年前

    一个快速的谷歌搜索 sys_proctable 这应该可以让你用一种便携的方式来完成。

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

        2
  •  8
  •   AboutRuby    15 年前

    如何做到这一点取决于您的操作系统。假设使用Linux,您可以手动对/proc文件系统进行爬网并查找正确的命令行。然而,这与pgrep所做的是相同的事情,并且实际上会使程序 较少的 便携式。

    像这样的事情可能会奏效。

    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中搜索。

        3
  •  1
  •   oytnx    13 年前

    基于Debian的系统通过pidof命令找到PID。

    一些带有ruby的kill process函数:

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