鑑於這種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完成同樣的事情?
睡眠命令只是一個例子,只是假設它們長時間運行外部命令。
鑑於這種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完成同樣的事情?
睡眠命令只是一個例子,只是假設它們長時間運行外部命令。
直接從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無論外部命令。
要回答我的問題(剛剛發現了這個):
#!/usr/bin/ruby
spawn 'sleep 2'
spawn 'sleep 5'
spawn 'sleep 1'
Process.waitall
關於Ruby 1.8你需要安裝SFL的寶石,也需要這樣的:
require 'rubygems'
require 'sfl'
#!/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) }