鉴于这个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完成同样的事情?
睡眠命令只是一个例子,只是假设他们长时间运行外部命令。
答案 0 :(得分:5)
直接来自Process#waitall
文档:
fork { sleep 0.2; exit 2 } #=> 27432
fork { sleep 0.1; exit 1 } #=> 27433
fork { exit 0 } #=> 27434
p Process.waitall
当然,您可以使用Kernel#system
或backtick operator来调用任何外部命令,而不是使用Ruby的sleep
。
答案 1 :(得分: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) }
答案 2 :(得分:0)
回答我自己的问题(刚刚发现这个问题):
#!/usr/bin/ruby
spawn 'sleep 2'
spawn 'sleep 5'
spawn 'sleep 1'
Process.waitall
在ruby 1.8上你需要安装sfl gem并且还要求:
require 'rubygems'
require 'sfl'