我这里有个需求,希望主进程能创建一些独立运行的子进程,但是主进程需要监控子进程的执行情况,在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服务