Это работает для меня, со следующим изменением:
pipe_in.close
end
+pipe_in.close
+pipe_out.close
+
Process.wait
Process.wait
Без этого изменения у вас все еще будут открытые каналы в исходном процессе, поэтому читатель никогда не увидит конец файла.То есть процесс, выполняющий ожидание, все еще имел открытый канал записи, ведущий к тупику.