Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中在后台运行多个外部命令_Ruby_Shell_Unix_Process_Multitasking - Fatal编程技术网

如何在ruby中在后台运行多个外部命令

如何在ruby中在后台运行多个外部命令,ruby,shell,unix,process,multitasking,Ruby,Shell,Unix,Process,Multitasking,给定此Unix shell脚本: test.sh: #!/bin/sh sleep 2 & sleep 5 & sleep 1 & wait time./test.sh real 0m5.008s user 0m0.040s sys 0m0.000s 在Unix机器上,如何在Ruby中完成同样的事情 sleep命令只是一个示例,假设它们是长时间运行的外部命令。直接从文档: fork { sleep 0.2; exit 2 } #=> 27432 fork

给定此Unix shell脚本:

test.sh:

#!/bin/sh
sleep 2 &
sleep 5 &
sleep 1 &
wait
time./test.sh

real 0m5.008s
user 0m0.040s
sys  0m0.000s
在Unix机器上,如何在Ruby中完成同样的事情

sleep命令只是一个示例,假设它们是长时间运行的外部命令。

直接从文档:

fork { sleep 0.2; exit 2 }   #=> 27432
fork { sleep 0.1; exit 1 }   #=> 27433
fork {            exit 0 }   #=> 27434
p Process.waitall
当然,不必使用Ruby的
sleep
,您可以使用或调用任何一个外部命令来回答我自己的问题(刚刚发现这个问题):

在ruby 1.8上,您需要安装sfl gem,并且还需要:

require 'rubygems'
require 'sfl'
#/usr/bin/env ruby
pids=[]
皮德斯
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) }