`
caiyuanmao
  • 浏览: 3638 次
  • 来自: 深圳
社区版块
存档分类
最新评论

使用druby,达到ruby的子进程向父进程传递子进程PID数据

 
阅读更多

我这里有个需求,希望主进程能创建一些独立运行的子进程,但是主进程需要监控子进程的执行情况,在windows上,system,exec,··方式创建的独立子进程,主进程似乎没有什么办法可以获取其PID,以便监控其执行情况,我采用的druby方式,来达到子进程向父进程传递参数的目的。(通过PID,主进程可以在定时器超时时,通过PID,杀死子进程)

 

父进程文件druby_server.rb

 require 'drb/drb'

 ip = 'localhost'
 port = '8787'

class TimeServer
     attr_accessor :pid
     def get_current_time
       return Time.now
     end
     
	 def push_process_pid(pid)
	   @pid = pid
	 end
	 def druby_reboot
	     DRb.stop_service
	 end
end

  
   obj_server=TimeServer.new
   DRb.start_service("druby://#{ip}:#{port}", obj_server)

rs = File.dirname(__FILE__) + "/druby_client.rb"
Thread.new do 
   system("ruby.exe #{rs}") 
 end
 sleep 2  #此处可以采用轮询的方式来观察子进程是否已经将PID数据传递过来
 p obj_server.pid

 DRb.thread.join

 同目录下子进程使用的文件druby_client.rb

   require 'drb/drb'

   ip = 'localhost'
   port = '8787'

   DRb.start_service
   
   client = DRbObject.new_with_uri("druby://#{ip}:#{port}")
   pid = Process.pid
   client.push_process_pid(pid)
   # client.druby_reboot #强制终止远端druby服务

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics