我在程序中使用Ruby 1.9和以下方法:
Process.daemon
然后,当我打开一个新终端时,我想调用我的守护程序(名为 my_program )并向其发送消息。比如这个:
$ my_program --are_you_still_alive
谢谢你的任何想法。
答案 0 :(得分:1)
您可以使用信号来确定程序是否还活着
Signal.trap("USR1") do
puts "I'm alive"
end
然后你打电话
$ kill -USR1 $(pidof my_program)
答案 1 :(得分:1)
有多种方法可以进行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
希望这有帮助!