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

发布于 2024-10-10 17:44:14 字数 354 浏览 4 评论 0原文

我使用调度程序(Rufus 调度程序)每分钟启动一个名为“ar_sendmail”的进程(来自 ARmailer)。

当已经有这样的进程正在运行时,不应启动该进程,以免耗尽内存。

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

scheduler = Rufus::Scheduler.start_new

  scheduler.every '1m' do

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

  end

end

I use a scheduler (Rufus scheduler) to launch a process called "ar_sendmail" (from ARmailer), every minute.

The process should NOT be launched when there is already such a process running in order not to eat up memory.

How do I check to see if this process is already running? What goes after the unless below?

scheduler = Rufus::Scheduler.start_new

  scheduler.every '1m' do

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

  end

end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

强者自强 2024-10-17 17:44:14
unless `ps aux | grep ar_sendmai[l]` != ""
unless `ps aux | grep ar_sendmai[l]` != ""
萌吟 2024-10-17 17:44:14
unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s]
unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s]
别挽留 2024-10-17 17:44:14

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

  # Check if a process is running
  def running?(pid)
    Process.kill(0, pid)
    true
  rescue Errno::ESRCH
    false
  rescue Errno::EPERM
    true
  end

稍作修改自 快速开发提示 您可能不想拯救 EPERM,意思是“它正在运行,但不允许您杀死它”。

This looks neater I think, and uses built-in Ruby module. Send a 0 kill signal (i.e. don't kill):

  # Check if a process is running
  def running?(pid)
    Process.kill(0, pid)
    true
  rescue Errno::ESRCH
    false
  rescue Errno::EPERM
    true
  end

Slightly amended from Quick dev tips You might not want to rescue EPERM, meaning "it's running, but you're not allowed to kill it".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文