【问题标题】:Talking with a Ruby daemonized process与 Ruby 守护进程对话
【发布时间】:2010-10-24 20:13:54
【问题描述】:

我在我的程序中使用 Ruby 1.9 和以下方法:

Process.daemon

然后,当我打开一个新终端时,我想调用我的守护程序(名为 my_program)并向其发送消息。比如这样:

$ my_program --are_you_still_alive

感谢您的任何想法。

【问题讨论】:

  • 您还没有接受任何答案的任何特殊原因?

标签: process daemon ruby-1.9


【解决方案1】:

您可以使用信号来确定程序是否还活着

Signal.trap("USR1") do
  puts "I'm alive"
end

然后你打电话

$ kill -USR1 $(pidof my_program)

【讨论】:

  • 感谢您的回答,Lukstei。但我只是想给它发一条消息。我的麻烦是,当进程成为守护进程时,我不知道如何联系它。
  • 哦,那就试试分布式 Ruby (segment7.net/projects/ruby/drb/index.html)
【解决方案2】:

有几种方法可以进行 IPC (inter-process communication)。一种方法是发送信号,正如@lukstei 所展示的那样,他的回答是。另一种方法是使用套接字,这是一个守护进程的最小示例,您可以使用 TCP 套接字请求时间:

#!/usr/bin/env ruby -wKU

require 'socket'

case ARGV[0]
when "start"
  puts "start daemon"
  server = TCPServer.open('0.0.0.0', 9090)
  Process.daemon
  loop {
    conn = server.accept
    conn.puts "Hello !"
    conn.puts "Time is #{Time.now}"
    conn.close    
  }
when "time?"
  puts "Asking daemon what time it is"
  sock = TCPSocket.open('0.0.0.0', 9090)
  while line = sock.gets
    puts line
  end
  sock.close
end

让我们试试吧:

$ ./my_daemon.rb start
start daemon
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:32 +0200
$ ./my_daemon.rb time?
Asking daemon what time it is
Hello !
Time is 2013-10-25 17:01:34 +0200

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多