Разговор с Ruby-демонизированным процессом - PullRequest
0 голосов
/ 25 октября 2010

Я использую Ruby 1.9 и следующий метод внутри моей программы:

Process.daemon

Затем, когда я открываю новый терминал, я хотел бы вызвать свою демонизированную программу (названную my_program ) и отправьте ему сообщение.Например:

$ my_program --are_you_still_alive

Спасибо за любую идею.

Ответы [ 2 ]

1 голос
/ 25 октября 2013

Существует несколько способов сделать IPC ( межпроцессное взаимодействие ). Одним из способов отправки сигналов, как показывает @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

Надеюсь, это поможет!

1 голос
/ 25 октября 2010

вы можете использовать сигналы, чтобы определить, если программа еще жива

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

, тогда вы звоните

$ kill -USR1 $(pidof my_program)
...