これを行うにはいくつかの方法があり、コンテキストがなければ 1 つを推奨することは困難です。
フォークされたプロセスとパイプを使用する 1 つの方法を次に示します。
# When given '-' as the first param, IO#popen forks a new ruby interpreter.
# Both parent and child processes continue after the return to the #popen
# call which returns an IO object to the parent process and nil to the child.
pipe = IO.popen('-', 'w+')
if pipe
# in the parent process
%w(please upcase these words).each do |s|
STDERR.puts "sending: #{s}"
pipe.puts s # pipe communicates with the child process
STDERR.puts "received: #{pipe.gets}"
end
pipe.puts '!quit' # a custom signal to end the child process
else
# in the child process
until (str = gets.chomp) == '!quit'
# std in/out here are connected to the parent's pipe
puts str.upcase
end
end
IO#popen hereのいくつかのドキュメント。これはすべてのプラットフォームで機能するとは限らないことに注意してください。
これにアプローチする他の可能な方法には、名前付きパイプ、drb、およびメッセージ キューが含まれます。