开发者

How to run multiple external commands in the background in ruby

开发者 https://www.devze.com 2023-02-04 00:26 出处:网络
Given this Unix shell script: test.sh: #!/bin/sh sleep 2 & sleep 5 & sleep 1 & wait time ./test.sh

Given this Unix shell script:

test.sh:

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

time ./test.sh

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

How would you accomplish the same thing开发者_运维问答 in Ruby on a Unix machine?

The sleep commands are just an example, just assume that they are long running external commands instead.


Straight from Process#waitall documentation:

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

Of course, instead of using Ruby's sleep, you can call whichever external command using Kernel#system, or backtick operator.


#!/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) }


To answer my own question (just found out about this):

​#!/usr/bin/ruby

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

Process.waitall

On ruby 1.8 you need to install the sfl gem and also require this:

require 'rubygems'
require 'sfl'
0

精彩评论

暂无评论...
验证码 换一张
取 消