2010-10-24 4 views
0

J'utilise Ruby 1.9 et la méthode suivante dans mon programme:Parler avec un Ruby processus daemon

Process.daemon 

Puis, quand j'ouvre un nouveau terminal, je voudrais appeler mon programme daemon (nommé mon_programme) et lui envoyer un message. Tels que ceci:

$ my_program --are_you_still_alive 

Merci pour votre idée.

+0

Une raison particulière pour laquelle vous n'avez encore accepté aucune réponse? –

Répondre

1

vous pouvez utiliser des signaux pour déterminer si le programme est encore en vie

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

vous appelez

$ kill -USR1 $(pidof my_program) 
+0

Merci pour votre réponse, Lukstei. Mais je voudrais juste lui envoyer un message. Mon problème est que, lorsque le processus devient un démon, je ne sais pas comment le contacter. – moshimoshi

+0

oh alors essayez d'utiliser Distributed Ruby (http://segment7.net/projects/ruby/drb/index.html) – lukstei

1

Il y a plusieurs façons de le faire IPC (inter-process communication). L'one-way est l'envoi de signaux comme @lukstei montre sa réponse. Une autre façon est d'utiliser les sockets, voici un exemple minimal d'un démon que vous pouvez demander le temps en utilisant les sockets 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 

Essayons sur:

$ ./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 

Hope this helps!

Questions connexes