2011-01-14 219 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) }