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

Tom*_*ogg 13 ruby-on-rails process rufus-scheduler

我使用调度程序(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
Run Code Online (Sandbox Code Playgroud)

ste*_*tef 23

unless `ps aux | grep ar_sendmai[l]` != ""
Run Code Online (Sandbox Code Playgroud)

  • 它是从grep中删除与ar_sendmail匹配的进程的调用进程 - 否则你会得到'grep ar_sendmail'的结果 (8认同)
  • 如果你想提取pids:`ps aux | grep ar_sendmai [l] | awk'{print $ 2}'` (4认同)
  • 不要将`unless`与`!=`一起使用,因为它会导致精神痛苦.而是使用`if`和`==`:`如果某事== something_else`比`除非某事!= something_else`更容易被理解. (2认同)

dah*_*erg 8

unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s]
Run Code Online (Sandbox Code Playgroud)