你如何同时从ruby运行ruby脚本?

wal*_*aye 2 ruby scripting command system

我有一个名为main.rb的程序,我想执行以下操作:

system("ruby", "program1.rb")
sleep 60
system("ruby", "program2.rb")
sleep 60
system("ruby", "program3.rb")
sleep 60
system("ruby", "program4.rb")

puts "Programs are done running"
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有program2等到program1完成之后执行上述操作等等?我想它可能要为每个程序打开一个新的CLI?此外,我只想在完成所有4个时输出"程序已完成运行"消息.有没有办法做到这一点?谢谢!

dbe*_*hur 6

您似乎希望每个程序同时运行,但希望在启动每个子程序之间等待60秒,然后等待所有程序完成. Process::spawn本质上是system背景子进程返回其pid.这应该可以满足您的需求:

to_run = %w{program1.rb program2.rb program3.rb program4.rb}
pids = [ Process.spawn('ruby', to_run.first) ]
pids.concat to_run.drop(1).map{ |p| sleep(60); Process.spawn('ruby', p) }
Process.waitall
puts 'Everything done!'
Run Code Online (Sandbox Code Playgroud)

如果在其他地方产生了其他子进程,waitall则会等待所有这些进程.要仅等待您在此处生成的集合,请将Process.waitall上面的内容替换为循环wait

pids.delete(wait) until pids.empty?
Run Code Online (Sandbox Code Playgroud)