From: "jeremyevans0 (Jeremy Evans)" Date: 2013-11-06T07:14:47+09:00 Subject: [ruby-core:58177] [ruby-trunk - Bug #9082] popen3 hangs when stderr gets lots of output Issue #9082 has been updated by jeremyevans0 (Jeremy Evans). I think this is expected behavior, not a bug. Your test.rb program blocks outputting to stderr because the pipe buffer gets filled. The reason it works for less output to stderr is that the program exits before the stderr pipe buffer is full. The reason it works if you read stderr before stdout is that you drain the stderr pipe buffer, allowing the program to exit. ---------------------------------------- Bug #9082: popen3 hangs when stderr gets lots of output https://bugs.ruby-lang.org/issues/9082#change-42763 Author: rosenfeld (Rodrigo Rosenfeld Rosas) Status: Open Priority: Normal Assignee: Category: lib Target version: ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] Backport: Create this program test.rb: STDERR.puts "some error line\n" * 10_000 Then, try this: ruby -r open3 -e "Open3.popen3('ruby test.rb'){|i,o,e,t|i.close;o.read}" For this particular case, if I do "e.read" before "o.read" it works. But for my real case involving the "tidy" command with lots of warnings in the stderr it will freeze even if I call "e.read". Since I don't really need this output, I'm using popen2 and redirecting stderr to /dev/null, so this is not urgent, but I thought you'd like to know about this. Also, if you replace 10_000 with 1_000 above it also works here. -- http://bugs.ruby-lang.org/