- 浏览: 427539 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lkun__blog:
网页打不开啊
博客搬家到http://cuiz.me -
bglmmz:
楼主怎么解决的?我用python调用ice服务,也出现此问题, ...
syscall exception: 存储空间不足,无法处理此命令 -
luliangy:
哥,你什么配置,我10W个请求10秒左右就搞定了,毫无压力,R ...
Nginx和Apache简单的并发压力测试 -
liuxuejin:
这!看的我都···········。我看代码而已。怎么
EPOLL及消息队列实现SMTP 之 青楼的故事 -
zires:
night_stalker 写道unicorn 也很好维护啊, ...
Unicorn和Passenger性能测试对比
Ruby的线程肯定是假的,不废话
Ruby的进程,
--RednaxelaFX提供的win/process可以很好的新建进程--
在windows上是阻塞的,意思是通过system或者exec或者``或者Process.fork,用上面这些方式去执行一段代码,这段代码还是处于调用者的进程空间之内,会阻止调用者继续执行下面的代码,除非这段代码执行完毕。
在linux上通过使用Process.fork将是非阻塞的执行。system或者exec或者``仍然是阻塞的,调用者将等待被调用着返回。
大侠拍一下吧,小弟就这么点理解,悟性不高。
贴一段测试代码方便兄弟们理解:
CharlesCui 写道--RednaxelaFX提供的win/process可以很好的新建进程--
改改,是Win32Util的Win32-Process啦……我还没能耐提供这样的库 XD
呵呵,我的意思就是这个了,反正是你给出用win/process的方案么。。。谢谢啊!
night_stalker每次回复的都很有深度,值得让小弟好好学习,赞!
改改,是Win32Util的Win32-Process啦……我还没能耐提供这样的库 XD
Ruby的进程,
--RednaxelaFX提供的win/process可以很好的新建进程--
在windows上是阻塞的,意思是通过system或者exec或者``或者Process.fork,用上面这些方式去执行一段代码,这段代码还是处于调用者的进程空间之内,会阻止调用者继续执行下面的代码,除非这段代码执行完毕。
在linux上通过使用Process.fork将是非阻塞的执行。system或者exec或者``仍然是阻塞的,调用者将等待被调用着返回。
大侠拍一下吧,小弟就这么点理解,悟性不高。
贴一段测试代码方便兄弟们理解:
p1 = Process.fork{ while true sleep 1 p "p1 1 seconds #{Process.pid};" `echo $$>>temp.pid` end } p2 = Process.fork{ while true sleep 2 p "p2 2 seconds #{Process.pid};" system("ll") end } #~ Process.detach(p1) #~ Process.waitpid(p2) while true sleep 5 puts 'this is caller! '+Process.pid.to_s end
执行结果 写道
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
this is caller! 1557
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
this is caller! 1557
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
"p1 1 seconds 1558;"
"p2 2 seconds 1559;"
"p1 1 seconds 1558;"
评论
6 楼
CharlesCui
2009-04-23
RednaxelaFX 写道
CharlesCui 写道--RednaxelaFX提供的win/process可以很好的新建进程--
改改,是Win32Util的Win32-Process啦……我还没能耐提供这样的库 XD
呵呵,我的意思就是这个了,反正是你给出用win/process的方案么。。。谢谢啊!
night_stalker每次回复的都很有深度,值得让小弟好好学习,赞!
5 楼
RednaxelaFX
2009-04-23
CharlesCui 写道
--RednaxelaFX提供的win/process可以很好的新建进程--
改改,是Win32Util的Win32-Process啦……我还没能耐提供这样的库 XD
4 楼
night_stalker
2009-04-23
Windows 不支持 Posix 进程 fork。
而且 Windows 进程是独立于创建它的进程的。
windows:A进程 创建了 B进程,A进程被杀,B进程还活着。
fork: A进程 创建了 B进程,A进程被杀,B进程也跟着死掉。
windows 下可以调用 win32 API CreateProcess 来产生新进程。
而且 Windows 进程是独立于创建它的进程的。
windows:A进程 创建了 B进程,A进程被杀,B进程还活着。
fork: A进程 创建了 B进程,A进程被杀,B进程也跟着死掉。
windows 下可以调用 win32 API CreateProcess 来产生新进程。
command = %q[ruby -e "puts 'a'"] command << 0 params = [ 'L', # IN LPCSTR lpApplicationName 'P', # IN LPSTR lpCommandLine 'L', # IN LPSECURITY_ATTRIBUTES lpProcessAttributes 'L', # IN LPSECURITY_ATTRIBUTES lpThreadAttributes 'L', # IN BOOL bInheritHandles 'L', # IN DWORD dwCreationFlags 'L', # IN LPVOID lpEnvironment 'L', # IN LPCSTR lpCurrentDirectory 'P', # IN LPSTARTUPINFOA lpStartupInfo 'P' # OUT LPPROCESS_INFORMATION lpProcessInformation ] # 这里还要写 n 行获取各种句柄及常数的语句…… startupInfo = [STARTUP_INFO_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW, 0, 0, 0, stdin, stdout, stderr].pack('IIIIIIIIIIIISSIIII') processInfo = [0, 0, 0, 0].pack('IIII') createProcess = Win32API.new("kernel32", "CreateProcess", params, 'I') createProcess.call(0, command, 0, 0, 1, 0, 0, 0, startupInfo, processInfo)
3 楼
CharlesCui
2009-04-23
require 'win32/process'
好东东啊。谢谢了!
用过一段时间开源的东西就感觉到,现在越来越多的项目天生就是要生长在linux下的,要在windows必须这个补丁那个补丁的。而以前,这种情况恰恰完全相反,比如以前linux下玩QQ,要找这个插件那个插件。哈哈哈
它出生在越位线,并长期生活在那里。
改一下:
ruby出生在linux下,并长期生活在那里。
好东东啊。谢谢了!
用过一段时间开源的东西就感觉到,现在越来越多的项目天生就是要生长在linux下的,要在windows必须这个补丁那个补丁的。而以前,这种情况恰恰完全相反,比如以前linux下玩QQ,要找这个插件那个插件。哈哈哈
它出生在越位线,并长期生活在那里。
改一下:
ruby出生在linux下,并长期生活在那里。
2 楼
potian
2009-04-23
谁说Ruby的线程是假的?
1 楼
RednaxelaFX
2009-04-23
Windows上。
按Ctrl+C结掉了主进程之后还有东西冒出来,只好手工把两个子ruby.exe进程给砍了。
require 'rubygems' require 'win32/process' p1 = Process.fork do while true sleep 1 p "p1 1 seconds #{Process.pid};" `echo $$>>temp.pid` end end p2 = Process.fork do while true sleep 2 p "p2 2 seconds #{Process.pid};" system("ll") end end #~ Process.detach(p1) #~ Process.waitpid(p2) while true sleep 5 puts 'this is caller! '+Process.pid.to_s end
执行结果 写道
E:\build_area\ruby187\bin>ruby z.rb
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
this is caller! 4004
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
this is caller! 4004
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
this is caller! 4004
"p1 1 seconds 3100;"
z.rb:24:in `sleep': Interrupt
from z.rb:24
E:\build_area\ruby187\bin>tthis is caller! 3100his is caller! 944
tthis is caller! 944his is caller! 3100
tthis is caller! 3100his is caller! 944
this is caller! 944
this is caller! 3100
this is caller! 944
this is caller! 3100
this is caller! 944
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
this is caller! 4004
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
this is caller! 4004
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
"p1 1 seconds 3100;"
"p2 2 seconds 944;"
"p1 1 seconds 3100;"
this is caller! 4004
"p1 1 seconds 3100;"
z.rb:24:in `sleep': Interrupt
from z.rb:24
E:\build_area\ruby187\bin>tthis is caller! 3100his is caller! 944
tthis is caller! 944his is caller! 3100
tthis is caller! 3100his is caller! 944
this is caller! 944
this is caller! 3100
this is caller! 944
this is caller! 3100
this is caller! 944
按Ctrl+C结掉了主进程之后还有东西冒出来,只好手工把两个子ruby.exe进程给砍了。
发表评论
-
N度空间关系图
2011-05-11 17:22 1592计算机 ... -
Rails3和Rack依赖关系图
2011-05-11 17:17 0找到一个好的画图工具不容易啊,试试这个 -
Unicorn和Passenger性能测试对比
2011-05-03 13:04 4350测试工具:ab 测试 ... -
libsmtp--库的一个bug
2011-02-18 17:09 1878http://libsmtp.sourceforge.net/ ... -
从main.c开始走进Ruby-异常
2010-08-26 18:21 1168这一阵子真没时间,9月上旬更没时间,头大. 前天写面试题目的 ... -
从main.c开始走进Ruby-有形亦无形的数据
2010-08-20 00:32 2291上一篇文章我们找到了如何调试Ruby的入口,只要走进去, ... -
从main.c开始走进Ruby-登上调试Ruby之旅
2010-08-18 12:11 1287我想更深入的了解Ruby内 ... -
日积月累-分享我的工具库
2010-08-04 11:53 1245批量替换 指定目录及其子目录中所有文件内的字符串 ... -
关键字和预定义变量:__END__和DATA的问题
2010-05-13 10:07 1322两个文件,a.rb和b.rb 当a.r ... -
[J]Ruby自编译安装
2010-02-24 11:37 1345#直接Copy并粘贴到控制台 #安装Ruby1.9.1- ... -
libvirt和ruby-libvirt在Macos系统上安装失败解决方法
2010-01-22 17:31 1179附件中是补丁及安装脚本, 安装前先看下install那个脚本 ... -
【GUI】LoadRunner的Controller定时执行
2010-01-19 14:38 3720玩玩的,很好玩不是么,工作就是要好玩,否则还工作个屁啊。 ... -
将QC的COM接口开放成Rest服务[续]
2010-01-14 11:53 1532利用QC的开放架构平台的COM组建, 给HP的QC写一个Met ... -
Ruby的ActiveRecord1.9个小时能够插入1000万mysql数据
2009-12-29 15:38 925rtrtrt -
TextMate中Command+R无法执行的变通解决方法
2009-12-28 12:08 2757如果你在升级了雪豹并且设定为64位启动模式后, TM无法通过C ... -
批量更改主机密码
2009-12-22 17:00 798require "rubygems" r ... -
将QC的COM接口开放成Rest服务
2009-11-16 17:05 2415以Ruby代码为例, QC平台的SDK以COM组件的形式对 ... -
虚拟机!
2009-11-12 16:25 839ruby-libvirt ============ Ruby ... -
Swig编译C/C++代码给Ruby [on Mac]
2009-10-12 15:01 2127charlesdemacbook-pro:swig Cui$ ... -
让一个类include一个模块的几种方法
2009-09-22 10:59 823module Test module ClassMeth ...
相关推荐
对于更复杂的场景,如需要处理子进程的输出,你可以这样操作: ```ruby process.io.stdout = File.open("output.txt", "w") process.io.stderr = File.open("error.txt", "w") process.start process.wait ``` ...
《Eye:Ruby进程监控工具,融合Bluepill与God之精华》 在Ruby开发领域,确保应用程序的稳定性和高效运行是至关重要的。为了达到这一目标,开发者们常常会使用到进程监控工具,它们能够帮助我们管理和控制应用进程,...
Ruby语言在进行进程管理时,提供了多种方法,其中之一就是`POSIX::Spawn`。这个库是Ruby的一个扩展,它提供了一种高效的方式来创建新的进程,尤其是对于Unix-like系统(包括Linux和Mac OS X)。`POSIX::Spawn`库的...
Ruby-Bluepill是一款由Ruby语言编写的简单而强大的进程监控工具。它被设计用来确保你的应用程序在生产环境中始终保持运行状态,即使某个进程崩溃,Bluepill也会自动重启它,从而提供了高可用性和稳定性。这个工具...
理解Unix进程从Unix编程的基础概念着手,采用循序渐进的方法,详细介绍了Unix进程的内部工作原理。...此外,《理解Unix进程》附录部分也涉及了一些流行的Ruby项目,让读者进一步了解如何巧妙运用Unix进程。
本文将详细介绍如何实现这一目标,并提供一个名为"Procodile"的工具作为示例,它是一个用于管理Ruby后台进程的库。文件adamcooke-procodile-89c82f7可能包含了该工具的源代码。 首先,了解在Linux上后台运行程序的...
Ruby Ruby Ruby Ruby Ruby Ruby
一、理解 Ruby 及其特点 Ruby 是一种简单快捷的面向对象脚本语言,由日本人松本行弘(Yukihiro Matsumoto)在20世纪90年代开发。它的语法简洁易懂,让程序员能够快速编写高效的代码。Ruby 的灵感来源于 Perl、...
NULL 博文链接:https://l-d.iteye.com/blog/1488038
ruby-git, ruby/Git是一个 ruby 库,可以通过将系统调用包装到Git二进制文件来创建读取和操作Git存储库 用于 ruby的 Git库在 ruby 中使用Git的库。主页项目源代码的Git public 位于:...
Ruby 字符串对决这是什么? 这个存储库包含一个用于 A/B 测试 Ruby 代码性能的测试工具,以及一些比较双引号和单引号字符串性能的测试。如何运行测试先决条件: Ruby(这是基于 Ruby 版本 2.2.0,但其他版本应该可以...
God:过程管理的Ruby框架...使服务器进程和任务保持运行应该是部署过程中的简单部分。 God的目标是成为最简单,功能最强大的监视应用程序。 文档请参阅REPO_ROOT / doc中的内部仓库文档。 请参阅位于http:/的在线文档
Ruby-Kamisama是一款用于从Ruby环境中启动、管理和监控后台工作进程的工具。它为开发者提供了方便的方式来控制长时间运行的任务,比如定期执行的作业、守护进程或者任何需要在后台独立运行的逻辑。Kamisama的名字...
希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程思想,充分享受编程的乐趣,通过《Ruby完全自学手册》进入Ruby开发的殿堂。同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 ...
Ruby 1.9 的发布对Ruby社区带来了显著的变化,尤其是其与之前的1.8版本之间的不兼容性。这种不兼容性源于对Ruby语言及其核心库的深入...对于那些希望跟上Ruby最新进展的程序员来说,理解和应对这些不兼容性至关重要。
Ruby是一种面向对象的脚本语言,以其简洁、优雅的语法和强大的编程能力而闻名。这份“Ruby语言教程大纲”可能是为了指导初学者或有经验的开发者系统地学习Ruby语言而设计的。以下是对Ruby语言的一些核心知识点的详细...
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
Ruby:Ruby模块与包的深入理解与应用
Ruby-Puma是一个高性能、轻量级且并发的Web服务器,专为Ruby编程语言设计。它在Ruby社区中广泛用于构建Web应用程序,特别是与Rails框架一起使用。Puma的设计目标是提供稳定、快速和易于管理的服务,同时保持低内存...
ruby-macho, 解析Mach文件的纯 ruby 库 ruby 用于检查和修改mach文件的ruby 库。什么是mach文件?文件格式由 OS X 和 iOS ( 它的他人) 用于目标文件。可执行文件。动态库等的通用二进制格式。文档完整的文档可以在 ...