# Stdout flush in fork

**URL:** <https://www.ruby-forum.com/t/stdout-flush-in-fork/89091>\
**Category:** Development\
**Created:** [March 17, 2007, 6:08am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091 "2007-03-17T06:08:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 17, 2007, 6:08am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/1 "2007-03-17T06:08:28Z")

</div>

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

ruby trunk e$B$G$N$O$J$7$G$9$,e(B,

fork e$B$9$k$H$-$Ke(B STDOUTe$B$He(BSTDERRe$B$re(Bflush  
e$B$9$k$H$"$j$^$9$,e(B,

rb\_fork e$B$r$_$F$_$k$He(B, flush e$B$7$F$+$ie(B  
forke$B$9$k$^$G$N4V$KB\>$N%9%l%C%I$,e(B  
e$B:FEYe(BSTDOUTe$B$J$I$K=q$-9~$\_$r9T$&2DG=@-$,$J$$$G$O$J$$$H;W$&$N$G$9$,$I$&$Je(B  
e$B$s$G$7$g$&e(B?

\_\_  
----------------------------------------------------\>\> e$B@PDMe(B  
e$B7=\<ye(B \<\<—  
----------------------------------\>\> e-mail: removed\_email\_address@domain.invalid \<\<—

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 17, 2007, 8:39am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/2 "2007-03-17T08:39:40Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30612] stdout flush in fork”  
on Sat, 17 Mar 2007 14:08:03 +0900, removed\_email\_address@domain.invalid (Keiju  
ISHITSUKA) writes:

|fork e$B$9$k$H$-$Ke(B STDOUTe$B$He(BSTDERRe$B$re(Bflush e$B$9$k$H$"$j$^$9$,e(B,  
|  
|rb\_fork e$B$r$_$F$_$k$He(B, flush e$B$7$F$+$ie(B forke$B$9$k$^$G$N4V$KB\>$N%9%l%C%I$,e(B  
|e$B:FEYe(BSTDOUTe$B$J$I$K=q$-9~$\_$r9T$&2DG=@-$,$J$$$G$O$J$$$H;W$&$N$G$9$,$I$&$Je(B  
|e$B$s$G$7$g$&e(B?

e$B$=$N2DG=@-$O$"$k$H;W$$$^$9$,!“LdBj$G$O$J$$$N$G$O!)e(B  
e$BLdBj$J$N$O!Ve(Bflushe$B$5$l$J$$$3$H!W$G$”$C$F!Ve(Bflushe$B$,B?$$$3$H!W$Oe(B  
e$B$5$[$ILdBj$K$J$i$J$$$h$&$K;W$$$^$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 17, 2007, 9:59am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/3 "2007-03-17T09:59:45Z")

</div>

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev:30614] the message: “[ruby-dev:30614] Re: stdout flush in  
fork”, on Mar/17 16:38(JST) Yukihiro M. writes:

> e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

> |rb\_fork e$B$r$_$F$_$k$He(B, flush e$B$7$F$+$ie(B forke$B$9$k$^$G$N4V$KB\>$N%9%l%C%I$,e(B  
> |e$B:FEYe(BSTDOUTe$B$J$I$K=q$-9~$\_$r9T$&2DG=@-$,$J$$$G$O$J$$$H;W$&$N$G$9$,$I$&$Je(B  
> |e$B$s$G$7$g$&e(B?
> 
> e$B$=$N2DG=@-$O$"$k$H;W$$$^$9$,!“LdBj$G$O$J$$$N$G$O!)e(B  
> e$BLdBj$J$N$O!Ve(Bflushe$B$5$l$J$$$3$H!W$G$”$C$F!Ve(Bflushe$B$,B?$$$3$H!W$Oe(B  
> e$B$5$[$ILdBj$K$J$i$J$$$h$&$K;W$$$^$9$,!#e(B

STDOUTe$B$Ke(Bflushe$B$7$?$"$He(B, forke$B$9$kA0$Ke(B,  
e$BB\>$N%9%l%C%I$,e(B, STDOUTe$B$K=q$-9~$`$Ce(B  
e$B$F$3$H$Oe(B STDOUTe$B$,e(Bflush  
e$B$5$l$F$$$J$$$3$H$K$J$k$H$\*$b$&$N$G$9$,e(B?

\_\_  
----------------------------------------------------\>\> e$B@PDMe(B  
e$B7=\<ye(B \<\<—  
----------------------------------\>\> e-mail: removed\_email\_address@domain.invalid \<\<—

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 19, 2007, 5:20am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/4 "2007-03-19T05:20:54Z")

</div>

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev:30619] the message: “[ruby-dev:30619] Re: stdout flush in  
fork”, on Mar/17 22:52(JST) Yukihiro M. writes:

> e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

> |STDOUTe$B$Ke(Bflushe$B$7$?$"$He(B, forke$B$9$kA0$Ke(B, e$BB\>$N%9%l%C%I$,e(B, STDOUTe$B$K=q$-9~$`$Ce(B  
> |e$B$F$3$H$Oe(B STDOUTe$B$,e(Bflush e$B$5$l$F$$$J$$$3$H$K$J$k$H$\*$b$&$N$G$9$,e(B?
> 
> e$B$"$l!)e(B e$B$A$g$C$HD4$YD\>$7$F$\_$^$7$?!#e(B
> 
> rb\_fork()e$B$,e(Brb\_f\_fork()e$B$+$i8F$P$l$k\>l9g$K$Oe(Brb\_thread\_atfork()  
> e$B$N8F$S=P$78e$G$9$+$i!"B\>$N%9%l%C%I$OB8:_$7$J$$$H$_$J$7$F$h$$e(B  
> e$B$H;W$$$^$9e(B(YARVe$B$G$O%F!\<%V%k$+$i:o=|$9$k$@$1$G\<B:]$K%9%l%C%Ie(B  
> e$B$r;_$a$k$h$&$K$7$F$J$$$_$?$$$@$1$Ie(B)e$B!#$@$+$iLdBj$J$7!#e(B

e$B$se(B?  
rb\_f\_fork e$B$,e(B rb\_fork e$B$r8F$S=P$7e(B,  
e$B$=$Ne(Bforke$B$7$?B&$Ge(B rb\_thread\_atforke$B$7$Fe(B  
e$B$$$k$h$&$K8+$($^$9$,e(B?

e$B$=$l$Ke(B, flushe$B$9$k$N$O$=$&$$$&LdBj$G$7$?$C$1e(B? e$B$D$^$je(B,  
e$B;R%W%m%;%9B&$G%9e(B  
e$B%l%C%I$,@8$-$F$$$F$=$l$,0-$5$9$k2DG=@-$,$"$k$+$ie(B?

\_\_  
----------------------------------------------------\>\> e$B@PDMe(B  
e$B7=\<ye(B \<\<—  
----------------------------------\>\> e-mail: removed\_email\_address@domain.invalid \<\<—

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 17, 2007, 2:53pm UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/5 "2007-03-17T14:53:05Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30616] Re: stdout flush in fork”  
on Sat, 17 Mar 2007 17:58:58 +0900, removed\_email\_address@domain.invalid  
(e$B@PDM7=\<ye(B) writes:  
|  
|e$B$1$$$8$e!w$$$7$D$+$G$9e(B.  
|  
|In [ruby-dev:30614] the message: “[ruby-dev:30614] Re: stdout flush in  
|fork”, on Mar/17 16:38(JST) Yukihiro M. writes:  
|  
|\>e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B  
|  
|\>|rb\_fork e$B$r$_$F$_$k$He(B, flush e$B$7$F$+$ie(B forke$B$9$k$^$G$N4V$KB\>$N%9%l%C%I$,e(B  
|\>|e$B:FEYe(BSTDOUTe$B$J$I$K=q$-9~$\_$r9T$&2DG=@-$,$J$$$G$O$J$$$H;W$&$N$G$9$,$I$&$Je(B  
|\>|e$B$s$G$7$g$&e(B?  
|\>  
|\>e$B$=$N2DG=@-$O$"$k$H;W$$$^$9$,!“LdBj$G$O$J$$$N$G$O!)e(B  
|\>e$BLdBj$J$N$O!Ve(Bflushe$B$5$l$J$$$3$H!W$G$”$C$F!Ve(Bflushe$B$,B?$$$3$H!W$Oe(B  
|\>e$B$5$[$ILdBj$K$J$i$J$$$h$&$K;W$$$^$9$,!#e(B  
|  
|STDOUTe$B$Ke(Bflushe$B$7$?$"$He(B, forke$B$9$kA0$Ke(B, e$BB\>$N%9%l%C%I$,e(B, STDOUTe$B$K=q$-9~$`$Ce(B  
|e$B$F$3$H$Oe(B STDOUTe$B$,e(Bflush e$B$5$l$F$$$J$$$3$H$K$J$k$H$\*$b$&$N$G$9$,e(B?

e$B$"$l!)e(B e$B$A$g$C$HD4$YD\>$7$F$\_$^$7$?!#e(B

rb\_fork()e$B$,e(Brb\_f\_fork()e$B$+$i8F$P$l$k\>l9g$K$Oe(Brb\_thread\_atfork()  
e$B$N8F$S=P$78e$G$9$+$i!"B\>$N%9%l%C%I$OB8:_$7$J$$$H$_$J$7$F$h$$e(B  
e$B$H;W$$$^$9e(B(YARVe$B$G$O%F!\<%V%k$+$i:o=|$9$k$@$1$G\<B:]$K%9%l%C%Ie(B  
e$B$r;_$a$k$h$&$K$7$F$J$$$_$?$$$@$1$Ie(B)e$B!#$@$+$iLdBj$J$7!#e(B

e$B$=$l0J30$Ge(Brb\_fork()e$B$rD\>@\8F$s$@\>l9g$K$O!“B\>$N%9%l%C%I$O$^$@e(B  
e$B@8$-$F$$$k$o$1$G$9$+$i!”$=$A$i$G$$$:$le(Bflushe$B$5$l$k$G$7$g$&!#e(B

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 19, 2007, 5:59am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/6 "2007-03-19T05:59:56Z")

</div>

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev:30630] the message: “[ruby-dev:30630] Re: stdout flush in  
fork”, on Mar/19 13:28(JST) Yukihiro M. writes:

> e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

> e$B$H$O$$$(!"e(Bflushe$B$;$M$P$J$i$J$$$N$Oe(Bforke$B$r9T$C$?%9%l%C%I$,=PNOe(B  
> e$B$7$?$b$N$G!"B\>$N%9%l%C%I$,=PNO$7$?$b$N$K$D$$$F$OB\>$N%9%l%C%Ie(B  
> e$B$+$i$$$:$le(Bflushe$B$5$l$k$N$O4V0c$$$J$$$h$&$K;W$$$^$9!#e(B

e$BN;2re(B.

> # e$B$A$g$C$H4\*0c$$$,B3$$$F\<+?.$J$/$J$C$F$-$?$1$Ie(B

e$B?.$8$^$9e(B(^^;

> forke$B$7$?;R%W%m%;%9$H=PNO$,:.$8$C$A$c$C$FFs=E$K=PNO$5$l$A$c$&e(B  
> e$B$+$i$H$+$@$C$?$h$&$J!#e(B

e$B$G$7$?$h$Me(B.

\_\_  
----------------------------------------------------\>\> e$B@PDMe(B  
e$B7=\<ye(B \<\<—  
----------------------------------\>\> e-mail: removed\_email\_address@domain.invalid \<\<—

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 19, 2007, 5:29am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/7 "2007-03-19T05:29:54Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30628] Re: stdout flush in fork”  
on Mon, 19 Mar 2007 13:20:17 +0900, removed\_email\_address@domain.invalid  
(e$B@PDM7=\<ye(B) writes:

|\>rb\_fork()e$B$,e(Brb\_f\_fork()e$B$+$i8F$P$l$k\>l9g$K$Oe(Brb\_thread\_atfork()  
|\>e$B$N8F$S=P$78e$G$9$+$i!"B\>$N%9%l%C%I$OB8:_$7$J$$$H$_$J$7$F$h$$e(B  
|\>e$B$H;W$$$^$9e(B(YARVe$B$G$O%F!\<%V%k$+$i:o=|$9$k$@$1$G\<B:]$K%9%l%C%Ie(B  
|\>e$B$r;_$a$k$h$&$K$7$F$J$$$_$?$$$@$1$Ie(B)e$B!#$@$+$iLdBj$J$7!#e(B  
|  
|e$B$se(B?  
|rb\_f\_fork e$B$,e(B rb\_fork e$B$r8F$S=P$7e(B, e$B$=$Ne(Bforke$B$7$?B&$Ge(B rb\_thread\_atforke$B$7$Fe(B  
|e$B$$$k$h$&$K8+$($^$9$,e(B?

e$B$(!\<$H!"$=$&$G$9$Me(B(e$BCQe(B

e$B$H$O$$$(!"e(Bflushe$B$;$M$P$J$i$J$$$N$Oe(Bforke$B$r9T$C$?%9%l%C%I$,=PNOe(B  
e$B$7$?$b$N$G!"B\>$N%9%l%C%I$,=PNO$7$?$b$N$K$D$$$F$OB\>$N%9%l%C%Ie(B  
e$B$+$i$$$:$le(Bflushe$B$5$l$k$N$O4V0c$$$J$$$h$&$K;W$$$^$9!#e(B

# e$B$A$g$C$H4\*0c$$$,B3$$$F\<+?.$J$/$J$C$F$-$?$1$Ie(B

|e$B$=$l$Ke(B, flushe$B$9$k$N$O$=$&$$$&LdBj$G$7$?$C$1e(B? e$B$D$^$je(B, e$B;R%W%m%;%9B&$G%9e(B  
|e$B%l%C%I$,@8$-$F$$$F$=$l$,0-$5$9$k2DG=@-$,$"$k$+$ie(B?

forke$B$7$?;R%W%m%;%9$H=PNO$,:.$8$C$A$c$C$FFs=E$K=PNO$5$l$A$c$&e(B  
e$B$+$i$H$+$@$C$?$h$&$J!#e(B

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 19, 2007, 8:11am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/8 "2007-03-19T08:11:04Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30636] Re: stdout flush in fork”  
on Mon, 19 Mar 2007 15:26:29 +0900, “Nobuyoshi N.”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|\> e$B$H$O$$$(!"e(Bflushe$B$;$M$P$J$i$J$$$N$Oe(Bforke$B$r9T$C$?%9%l%C%I$,=PNOe(B  
|\> e$B$7$?$b$N$G!“B\>$N%9%l%C%I$,=PNO$7$?$b$N$K$D$$$F$OB\>$N%9%l%C%Ie(B  
|\> e$B$+$i$$$:$le(Bflushe$B$5$l$k$N$O4V0c$$$J$$$h$&$K;W$$$^$9!#e(B  
|  
|e$BDL\>o$NN.$l$G$O$=$&$G$9$,!“e(Bfork(2)e$B$,e(BEAGAINe$B$G\<:GT$7$?$H$-$K$O%j%H%i%$A0$Ke(B  
|sleepe$B$7$F$^$9$+$i!”$=$3$GB\>$N%9%l%C%I$+$ie(Bforke$BA0$K=PNO$5$l$F$7$^$&2DG=@-e(B  
|e$B$O$”$k$+$b$7$l$^$;$s!#e(B  
|  
|1.8e$B$@$H%j%H%i%$$7$F$$$?$N$Oe(Bsysteme$B$@$1$@$C$?$s$G$9$,!“e(Brubye$B%l%Y%k$GKh2s$=e(B  
|e$B$3$^$GLLE]8+$J$$$H$$$1$J$$$H$$$&$N$b%$%d$J$N$Ge(BProcess.forke$B$b$”$o$;$F$7$^e(B  
|e$B$$$^$7$?!#8+Mn$H$7$F$^$7$?!#e(B

e$B%3%\_%C%H$7$F$/$@$5$$!#e(B

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 19, 2007, 7:27am UTC](https://www.ruby-forum.com/t/stdout-flush-in-fork/89091/9 "2007-03-19T07:27:01Z")

</div>

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

At Mon, 19 Mar 2007 13:28:46 +0900,  
Yukihiro M. wrote in [ruby-dev:30630]:

> e$B$H$O$$$(!"e(Bflushe$B$;$M$P$J$i$J$$$N$Oe(Bforke$B$r9T$C$?%9%l%C%I$,=PNOe(B  
> e$B$7$?$b$N$G!"B\>$N%9%l%C%I$,=PNO$7$?$b$N$K$D$$$F$OB\>$N%9%l%C%Ie(B  
> e$B$+$i$$$:$le(Bflushe$B$5$l$k$N$O4V0c$$$J$$$h$&$K;W$$$^$9!#e(B

e$BDL\>o$NN.$l$G$O$=$&$G$9$,!“e(Bfork(2)e$B$,e(BEAGAINe$B$G\<:GT$7$?$H$-$K$O%j%H%i%$A0$Ke(B  
sleepe$B$7$F$^$9$+$i!”$=$3$GB\>$N%9%l%C%I$+$ie(Bforke$BA0$K=PNO$5$l$F$7$^$&2DG=@-e(B  
e$B$O$"$k$+$b$7$l$^$;$s!#e(B

1.8e$B$@$H%j%H%i%$$7$F$$$?$N$Oe(Bsysteme$B$@$1$@$C$?$s$G$9$,!“e(Brubye$B%l%Y%k$GKh2s$=e(B  
e$B$3$^$GLLE]8+$J$$$H$$$1$J$$$H$$$&$N$b%$%d$J$N$Ge(BProcess.forke$B$b$”$o$;$F$7$^e(B  
e$B$$$^$7$?!#8+Mn$H$7$F$^$7$?!#e(B

# Index: process.c

— process.c (revision 12090)  
+++ process.c (working copy)  
@@ -1344,8 +1344,14 @@ rb\_fork(int \*status, int (_chfunc)(void_

#ifndef \_\_VMS

- rb\_io\_flush(rb\_stdout);
- rb\_io\_flush(rb\_stderr);  
+#define prefork() ( \

- rb\_io\_flush(rb\_stdout), \

- rb\_io\_flush(rb\_stderr) \

- )  
+#else  
+#define prefork() ((void)0)  
#endif

- prefork();

- 

#ifdef FD\_CLOEXEC  
if (chfunc) {  
@@ -1357,5 +1363,5 @@ rb\_fork(int \*status, int (_chfunc)(void_  
}  
#endif

- while ((pid = fork()) \< 0) {

- for (; (pid = fork()) \< 0; prefork()) {  
switch (errno) {  
case EAGAIN:
