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

使用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服务

 

分享到:
评论

相关推荐

    Ruby-childprocess跨平台的ruby库来管理子进程

    例如,你可以通过`pid`属性获取进程ID,`wait`方法阻塞直到子进程结束,`stop`方法可以优雅地关闭子进程(发送SIGTERM,如果未响应则发送SIGKILL),而`io`属性则可以让你设置输入、输出和错误流。 对于更复杂的...

    Ruby.Programming_向Ruby之父学程序设计(第2版)

    《Ruby Programming:向Ruby之父学程序设计(第2版)》是为了让完全没有程序设计经验的读者也能灵活地使用Ruby,因此书中详细地说明了各种知识。从程序所需要的变量、常数、方法、类、控制结构等语法的说明,到类的主要...

    《Ruby Programming—向Ruby之父学程序设计(第2版)》电子书

    《Ruby Programming—向Ruby之父学程序设计(第2版)》这本书旨在帮助初学者,甚至是完全没有编程背景的读者,快速掌握Ruby语言的基础和高级概念。 首先,Ruby是一种动态类型语言,这意味着变量的类型在运行时自动...

    Ruby_向ruby之父学程序设计(第二版)(经典入门)

    完整书名《Ruby Programming-向Ruby之父学程序设计》 ,就是那本经典的绿皮书 第一部分:通过简单的Ruby程序来介绍程序的基本架构。  第二部分:介绍基础语法规则,以及类、模块等面向对象程序设计的思考方法与...

    Ruby.Programming_向Ruby之父学程序设计(第2版).pdf (含书签)

    [Ruby.Programming_向Ruby之父学程序设计(第2版)].(日)高桥征义,(日)后藤裕藏.扫描版(ED2000.COM).pdf ) 带书签

    《Ruby Programming_向Ruby之父学程序设计_第2版》PDF版本下载.txt

    《Ruby Programming_向Ruby之父学程序设计_第2版》PDF版本下载

    使用ruby解析awdb离线库

    使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...

    Ruby-forkoffruby简单的并行处理

    子进程和父进程可以并行执行不同的任务,互不影响。 `ForkOff`库提供了一种封装,使得使用`fork`进行并行处理更加方便。它的核心概念是将任务分解为一系列可独立运行的单元,然后在子进程中执行这些单元。通过这种...

    向ruby之父学程序设计

    ruby的基础语言,如果使用ruby编程,测试框架的搭建

    Ruby on Rails中MVC结构的数据传递解析

    Ruby on Rails是一个使用Ruby语言开发的开源Web应用框架,它遵循MVC(Model-View-Controller)模式,即模型-视图-控制器模式。MVC模式是一种将应用程序架构分层的设计模式,将数据处理、用户界面和控制逻辑分离,...

    Ruby Data-Processing ruby数据处理

    Ruby是一种强大的动态编程语言,尤其在数据处理方面表现出色。Map、Reduce和Select是Ruby中用于操作和处理数据的关键概念,它们在数据科学、分析和软件工程领域中扮演着重要角色。 1. **Ruby Map**: Map函数允许...

    R和Ruby数据分析之旅,中文完整扫描版

    借助基本的数学方法,并使用Ruby和R语言做一些简单的编程工作,你就能学会如何对问题建模,并找出解决方案。 要阅读《R和Ruby数据分析之旅》,对编程有基本了解就足够了。书中会对Ruby和R做一个简明的介绍,之后你...

    Ruby-posixspawnRubys快速进程spawn基于posixspawn系统接口

    Ruby语言在进行进程管理时,提供了多种方法,其中之一就是`POSIX::Spawn`。这个库是Ruby的一个扩展,它提供了一种高效的方式来创建新的进程,尤其是对于Unix-like系统(包括Linux和Mac OS X)。`POSIX::Spawn`库的...

    R和Ruby数据分析之旅

    R和Ruby数据分析之旅 数据分析 数据挖掘

    ruby脚本交互.rar

    通过调用系统命令或使用子进程,易语言程序可以启动并控制Ruby脚本,实现功能互补。 4. **Ruby的脚本执行**: 在Ruby中,你可以使用`system`、`backticks`或`%x`来执行外部命令。例如,如果要运行一个名为`my_script...

    Ruby-LazyHighCharts一个简单和非常灵活的方式从ruby代码使用HighCharts

    总的来说,Ruby-LazyHighCharts为Ruby开发者提供了一个强大且易于使用的工具,使他们能够便捷地将HighCharts的功能整合到自己的应用中,无论是在动态的Web应用还是静态的站点中,都能实现高效的数据可视化。...

    Distributed Ruby

    DRb提供了一种简单而直接的方式实现分布式应用,尤其适合那些需要跨进程或跨机器共享数据的应用场景。 #### 二、DRb架构 DRb的架构主要分为两个部分:Server端和Client端。 - **Server端**:在Server端,DRb使用`...

    Ruby-rgeoRuby的地理空间数据的库

    Ruby-rgeo库是Ruby编程语言中的一个核心工具,专门用于处理和操作地理空间数据。它为开发者提供了丰富的功能,使得在Ruby环境中进行地理信息系统(GIS)相关的开发变得更加便捷。Rgeo库不仅支持基本的空间数据类型,...

    使用Ruby来处理文本的教程

    除了连接字符串,Ruby的String类还提供了强大的方法来提取子字符串,可以使用索引或范围来指定需要提取的字符序列。例如: ```ruby str = "The world for a horse" puts str[0] # 输出: T puts str[0, 5] # 输出: ...

Global site tag (gtag.js) - Google Analytics