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

发布于 2024-10-12 04:00:20 字数 306 浏览 5 评论 0 原文

给定这个 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 完成同样的事情?

睡眠命令只是一个示例,只需假设它们是长时间运行的外部命令即可。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沫离伤花 2024-10-19 04:00:20

直接来自 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,或 反引号运算符

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.

霞映澄塘 2024-10-19 04:00:20

回答我自己的问题(刚刚发现这个):

​#!/usr/bin/ruby

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

Process.waitall

在 ruby​​ 1.8 上,你需要安装 sfl gem 并且还需要这个:

require 'rubygems'
require 'sfl'

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'
自我难过 2024-10-19 04:00:20
#!/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) }
#!/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) }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文