【发布时间】:2010-10-24 20:13:54
【问题描述】:
我在我的程序中使用 Ruby 1.9 和以下方法:
Process.daemon
然后,当我打开一个新终端时,我想调用我的守护程序(名为 my_program)并向其发送消息。比如这样:
$ my_program --are_you_still_alive
感谢您的任何想法。
【问题讨论】:
-
您还没有接受任何答案的任何特殊原因?
我在我的程序中使用 Ruby 1.9 和以下方法:
Process.daemon
然后,当我打开一个新终端时,我想调用我的守护程序(名为 my_program)并向其发送消息。比如这样:
$ my_program --are_you_still_alive
感谢您的任何想法。
【问题讨论】:
您可以使用信号来确定程序是否还活着
Signal.trap("USR1") do
puts "I'm alive"
end
然后你打电话
$ kill -USR1 $(pidof my_program)
【讨论】:
有几种方法可以进行 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
希望这会有所帮助!
【讨论】: