2011-01-14 168 views
3
在后台运行多个外部命令

鉴于这种UNIX Shell脚本:如何红宝石

test.sh:

#!/bin/sh 
sleep 2 & 
sleep 5 & 
sleep 1 & 
wait 

时间./test.sh

real 0m5.008s 
user 0m0.040s 
sys 0m0.000s 

会如何你在Unix机器上用Ruby完成同样的事情?

睡眠命令只是一个例子,只是假设它们长时间运行外部命令。

回答

5

直接从Process#waitall文档:

fork { sleep 0.2; exit 2 } #=> 27432 
fork { sleep 0.1; exit 1 } #=> 27433 
fork {   exit 0 } #=> 27434 
p Process.waitall 

当然,而不是使用Ruby的sleep,你可以调用使用Kernel#system,或backtick operator无论外部命令。

0

要回答我的问题(刚刚发现了这个):

​#!/usr/bin/ruby 

spawn 'sleep 2' 
spawn 'sleep 5' 
spawn 'sleep 1' 

Process.waitall 

关于Ruby 1.8你需要安装SFL的宝石,也需要这样的:

require 'rubygems' 
require 'sfl' 
1
#!/usr/bin/env ruby 
pids = [] 
pids << Kernel.fork { `sleep 2` } 
pids << Kernel.fork { `sleep 5` } 
pids << Kernel.fork { `sleep 1` } 
pids.each { |pid| Process.wait(pid) }