鉴于这种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) }