in MRI 1.9.3-194 the fourth and last object is a Thread as specified:
Open3.popen3("ls")
=> [#<IO:fd 6>, #<IO:fd 7>, #<IO:fd 9>, #<Thread:0x007f9b3383c9c8 sleep>]
in JRuby only three IO Objects are returned
Open3.popen3("ls")
=> [#<IO:fd 8>, #<IO:fd 7>, #<IO:fd 9>]
The same is true for the block variant of popen3.
My environment:
java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)
$env | grep JRU
JRUBY_OPTS=--1.9
$env | grep JAVA
JAVA_OPTS=-client