# Open3.popen3 $B$N=\*N;=hM}(B

**URL:** <https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233>\
**Category:** Development\
**Created:** [January 24, 2007, 3:42pm UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233 "2007-01-24T15:42:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [January 24, 2007, 3:42pm UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233/1 "2007-01-24T15:42:57Z")

</div>

e$B$H$\_$?$G$9!#e(B

Open3.popen3 e$B$,%3%^%s%I$Ne(B exec  
e$B$K\<:GT$7$?\>l9g$K!"DL\>o$N=\*N;=hM}$r9T$J$Ce(B  
e$B$F$7$^$$!"e(Bat\_exit e$BEy$,\<B9T$5$l$F$7$^$$$^$9!#e(B

% ruby -ropen3 -e ‘at\_exit{p $$}; Open3.popen3("/bin/hogehoge"){|i,o,e|  
puts o.read}’  
30583 e$B"+e(B e$B;Re(B(e$BB9e(B?)e$B%W%m%;%9$N=PNOe(B  
30581

e$B4JC1$K%Q%C%A$r:n$C$F$\_$^$7$?!#e(B

# e$B%(%i!\<%a%C%;!\<%8$N7A\<0$,JQ$o$C$F$7$^$$$^$9$1$I!D!#e(B

— open3.rb.orig 2006-08-05 07:00:21.000000000 +0900  
+++ open3.rb 2007-01-24 23:13:42.000000000 +0900  
@@ -45,7 +45,12 @@  
STDERR.reopen(pe[1])  
pe[1].close

- exec(\*cmd)

- begin
- exec(\*cmd)
- rescue Exception =\> e
- STDERR.puts e.inspect
- exit!(1)
- end  
}  
exit!(0)  
}

---

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [January 24, 2007, 4:45pm UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233/2 "2007-01-24T16:45:27Z")

</div>

e$B$J$+$@$G$9!#e(B

At Wed, 24 Jan 2007 23:42:02 +0900,  
e$B$H$\_$?$^$5$R$me(B wrote in [ruby-dev:30181]:

> Open3.popen3 e$B$,%3%^%s%I$Ne(B exec e$B$K\<:GT$7$?\>l9g$K!"DL\>o$N=\*N;=hM}$r9T$J$Ce(B  
> e$B$F$7$^$$!"e(Bat\_exit e$BEy$,\<B9T$5$l$F$7$^$$$^$9!#e(B

e$B$I$C$A$+$H$$$&$H!"e(Bfork/exece$B$N$J$$4D6-$G$b;H$($k$h$&$Ke(B  
Process.spawne$B$r3HD%$7$?$$$H$3$G$9$,!#e(B

> # e$B%(%i!\<%a%C%;!\<%8$N7A\<0$,JQ$o$C$F$7$^$$$^$9$1$I!D!#e(B

e$B$3$&$$$&$N$O$I$&$G$7$g$&!#e(B

# Index: lib/open3.rb

— lib/open3.rb (revision 11540)  
+++ lib/open3.rb (working copy)  
@@ -65,7 +65,9 @@ module Open3  
pe[1].close

- at\_exit {exit!(false)}
- at\_exit {raise $!}  
exec(\*cmd)  
}

- 

```
 exit!(0)

```

- 

```
 exit!(true)

```

}

---

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [January 26, 2007, 12:23am UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233/3 "2007-01-26T00:23:35Z")

</div>

e$B$H$\_$?$G$9!#e(B

On Thu, 25 Jan 2007 00:36:51 +0900  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > # e$B%(%i!\<%a%C%;!\<%8$N7A\<0$,JQ$o$C$F$7$^$$$^$9$1$I!D!#e(B
> 
> e$B$3$&$$$&$N$O$I$&$G$7$g$&!#e(B

> - at\_exit {exit!(false)}
> - at\_exit {raise $!}  
> exec(\*cmd)  
> }
> 
> - 
> 
> ```
> exit!(0)
> 
> ```
> 
> - 
> 
> ```
> exit!(true)
> 
> ```

e$B$3$l$@$H!"e(Bat\_exit e$B$h$j$bA0$K\<B9T$5$l$ke(B trap SIGEXIT  
e$B$,F0$$$A$c$$$^$9!#e(B

e$B=\*N;=hM}$r9T$J$o$J$$e(B abort()  
e$B$,$"$l$PNI$$$h$&$J5$$,$7$F$-$^$7$?!#e(B  
abort!() e$B$H$+!#e(B

e$B$$$d!"$=$3$^$G%(%i!\<%a%C%;!\<%8$K$3$@$o$i$J$/$F$b$$$$$s$G$9$1$Ie(B  
(^^;

---

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [January 26, 2007, 1:27am UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233/4 "2007-01-26T01:27:42Z")

</div>

e$B$J$+$@$G$9!#e(B

At Fri, 26 Jan 2007 08:22:42 +0900,  
e$B$H$\_$?$^$5$R$me(B wrote in [ruby-dev:30194]:

> > - at\_exit {exit!(false)}
> > - at\_exit {raise $!}  
> > exec(\*cmd)  
> > }
> > 
> > - 
> > 
> > ```
> > exit!(0)
> > 
> > ```
> > 
> > - 
> > 
> > ```
> > exit!(true)
> > 
> > ```
> 
> e$B$3$l$@$H!"e(Bat\_exit e$B$h$j$bA0$K\<B9T$5$l$ke(B trap SIGEXIT e$B$,F0$$$A$c$$$^$9!#e(B

e$B$J$k$[$I!#$G$"$l$Pe(B at\_exit e$B$re(B trap SIGEXIT  
e$B$K$9$l$P$I$&$G$7$g$&!#e(B

> e$B=\*N;=hM}$r9T$J$o$J$$e(B abort() e$B$,$"$l$PNI$$$h$&$J5$$,$7$F$-$^$7$?!#e(B  
> abort!() e$B$H$+!#e(B

e$B$"$C$F$b$$$$$+$b$7$l$^$;$s$M!#e(B

---

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [January 26, 2007, 4:01am UTC](https://www.ruby-forum.com/t/open3-popen3-b-n-n-hm-b/83233/5 "2007-01-26T04:01:55Z")

</div>

e$B$J$+$@$G$9!#e(B

At Fri, 26 Jan 2007 09:26:39 +0900,  
Nobuyoshi N. wrote in [ruby-dev:30195]:

> > e$B$3$l$@$H!"e(Bat\_exit e$B$h$j$bA0$K\<B9T$5$l$ke(B trap SIGEXIT e$B$,F0$$$A$c$$$^$9!#e(B
> 
> e$B$J$k$[$I!#$G$"$l$Pe(B at\_exit e$B$re(B trap SIGEXIT e$B$K$9$l$P$I$&$G$7$g$&!#e(B

at\_exit  
e$B$r$+$($k$s$8$c$J$/$F!"e(Btrape$B$r%G%U%)%k%H$KLa$7$F$\*$1$P$h$5$=$&$G$9!#e(B  
e$B$=$l$H!"e(BProcess.detache$B$,DI2C$5$l$F$k$N$GFs=Ee(Bforke$B$O$b$&ITMW$+$b!#e(B

# Index: lib/open3.rb

— lib/open3.rb (revision 11551)  
+++ lib/open3.rb (working copy)  
@@ -51,6 +51,4 @@ module Open3  
pid = fork{  
# child

- 

```
 fork{

```

- 
# grandchild
pw[1].close  
STDIN.reopen(pw[0])  
@@ -65,13 +63,14 @@ module Open3  
pe[1].close

- 

```
 trap("EXIT", "DEFAULT")

```

- 

```
 at_exit {exit!(false)}

```

- 

```
 at_exit {raise($!)}

```

exec(\*cmd)  
}

- 

```
 exit!(0)

```

- }

- Process.waitpid(pid)

- Process.detach(pid)  
pi = [pw[1], pr[0], pe[0]]  
pw[1].sync = true
