4

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.

3 Answers 3

5

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.

Sign up to request clarification or add additional context in comments.

Comments

1

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'

Comments

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) }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.