首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ruby检查正在运行的进程?

如何使用Ruby检查正在运行的进程?
EN

Stack Overflow用户
提问于 2011-01-04 21:21:37
回答 3查看 14.7K关注 0票数 13

我使用一个调度器(Rufus调度器)每分钟启动一个名为"ar_sendmail“的进程(从ARmailer)。

为了不占用内存,不应该在已经有这样的进程运行时启动该进程。

如何检查此进程是否已在运行?下面的unless后面是什么?

代码语言:javascript
复制
scheduler = Rufus::Scheduler.start_new

  scheduler.every '1m' do

    unless #[what goes here?]
      fork { exec "ar_sendmail -o" }
      Process.wait
    end

  end

end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-04 21:28:25

代码语言:javascript
复制
unless `ps aux | grep ar_sendmai[l]` != ""
票数 24
EN

Stack Overflow用户

发布于 2015-04-08 16:48:31

代码语言:javascript
复制
unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s]
票数 8
EN

Stack Overflow用户

发布于 2019-08-28 16:09:42

我认为这看起来更整洁,并且使用了内置的Ruby模块。发送0终止信号(即不终止):

代码语言:javascript
复制
  # Check if a process is running
  def running?(pid)
    Process.kill(0, pid)
    true
  rescue Errno::ESRCH
    false
  rescue Errno::EPERM
    true
  end

Quick dev tips稍作修改,你可能不想拯救EPERM,意思是“它正在运行,但你不允许杀死它”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4594043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档