13

スケジューラー(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
4

3 に答える 3

24
unless `ps aux | grep ar_sendmai[l]` != ""
于 2011-01-04T13:28:25.210 に答える
8
unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s]
于 2015-04-08T08:48:31.370 に答える
1

これは私が思うにすっきりしていて、組み込みの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を救出したくない場合があります。つまり、「実行中ですが、強制終了することはできません」という意味です。

于 2019-08-28T08:09:41.763 に答える