summaryrefslogtreecommitdiff
path: root/lib/open3.rb
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-10-20 16:37:01 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-10-20 16:37:01 +0000
commit4098e5861e4a6dadf17e6502afbc139bcff3cd3b (patch)
tree46efc0ee553a8d4009758a4b18b4b52259923408 /lib/open3.rb
parent1b2d3f81ee00c3fc5f002aaf7a646ed08e605610 (diff)
matz
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/open3.rb')
-rw-r--r--lib/open3.rb24
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/open3.rb b/lib/open3.rb
index 27283f5019..11b9813bee 100644
--- a/lib/open3.rb
+++ b/lib/open3.rb
@@ -14,8 +14,8 @@ module Open3
pr = IO::pipe
pe = IO::pipe
- pid = fork
- if pid == nil then # child
+ pid = fork{
+ # child
pw[1].close
STDIN.reopen(pw[0])
pw[0].close
@@ -29,13 +29,21 @@ module Open3
pe[1].close
exec(cmd)
- exit
- else
- pw[0].close
- pr[1].close
- pe[1].close
- pi = [ pw[1], pr[0], pe[0] ]
+ _exit 127
+ }
+
+ pw[0].close
+ pr[1].close
+ pe[1].close
+ Thread.start do
+ sleep 1
+ Process.waitpid(pid)
+ end
+ pi = [ pw[1], pr[0], pe[0] ]
+ if defined? yield
+ return yield *pi
end
+ pi
end
module_function :popen3
end