我是ruby
面向对象语言的新手,我无法找到一种方法来完成在方法内分叉进程并将延迟输出传递给方法外使用,同时返回进程 ID。
def method(arg)
proc_id = fork do
var = `command #{arg}`
end
return both = [proc_id, var]
end
这不起作用,因为该过程尚未完成,因此var
将返回。nil
我怎么能完成这样的事情?
更新:
使用IO.pipe
我能够完成进程间通信。但是,尝试在方法中使用此解决方案将不允许我在不首先等待进程完成的情况下返回两者proc_id
,var
这迫使我创建新的数组和迭代,否则这些是不必要的。fork
这里的目标是在方法内部的进程仍在工作时,可以自由地在方法外部执行代码。
arg_array = ["arg1", "arg2", "arg3", "arg4"]
input = []
output = []
proc_id = []
arg_array.each_index do |i|
input[i], output[i] = IO.pipe
proc_id[i] = fork do
input[i].close
output[i].write `command #{arg_array[i]}`
end
output[i].close
end
command2
command3
include Process
waitpid(proc_id[0])
command4
Process.waitall
arg_array.each_index do |x|
puts input[x].read
end