digitalmars.D - std.process.system asynchronous? or win cmd line oddity?
- Nick Sabalausky (9/9) Aug 19 2010 Is std.process.system asynchronous? Is it supposed to be? Is execv known...
- Nick Sabalausky (6/16) Aug 19 2010 Also, do either of those have any sort of known gotchas regarding redire...
- Nick Sabalausky (316/318) Aug 19 2010 Ok that seems to be the case. See the attached screenshot. But it works ...
- Kagamin (3/14) Aug 20 2010 Yes, the console output is buffered in symantec library. Anyway, console...
- Nick Sabalausky (6/12) Aug 20 2010 See the screenshot I attached to that post. That should clarify what I m...
- Kagamin (2/5) Aug 20 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2742
- Kagamin (2/6) Aug 20 2010 Looks like execv doesn't wait for application exit.
- Kagamin (2/8) Aug 20 2010 Try to sleep after execv.
- Andrei Alexandrescu (3/11) Aug 20 2010 I think a form of join/wait is more appropriate.
- Kagamin (4/7) Aug 20 2010 That should be done inside execv.
- Kagamin (2/3) Aug 20 2010 No, it doesn't say it works in posix way, it only says execv doesn't ret...
- Nick Sabalausky (4/13) Aug 20 2010 execv always replaces the current process with the new one, so it never
- Nick Sabalausky (4/19) Aug 20 2010 (Contrary to phobos docs:
- Kagamin (2/8) Aug 20 2010 Also I'm not sure you can implement posix execv in windows.
- Kagamin (2/12) Aug 20 2010 To get expected behavior adjust console buffering with setvbuf and use s...
- Kagamin (2/16) Aug 20 2010 system() is also a C standard function.
- Nick Sabalausky (8/22) Aug 20 2010 setvbuf is new to me, I'll have to look that up. I was just pointing out...
- Steven Schveighoffer (6/22) Aug 23 2010 std.process.system simply calls the standard C system function. So
- Andrei Alexandrescu (4/30) Aug 23 2010 Yes, to the best of my knowledge auto-flushing upon \n happens only if
- Jonathan M Davis (9/20) Aug 20 2010 I believe that I got some odd behavior when I used wget; IIRC, it was re...
Is std.process.system asynchronous? Is it supposed to be? Is execv known to trick the windows command-line into giving control back to the user? I've been playing around a bit (on windows) with rdmd, which uses system() heavily (and also execv for running a newly-compiled program), and I frequently get text appearing (such as a compiler error message or results from a program being rdmd'd and run) *after* I get keyboard control back with a new prompt. Which is weird. It's going to take a little more work to whittle it down to a good test case, but I thought I'd ask if anyone knew something already.
Aug 19 2010
"Nick Sabalausky" <a a.a> wrote in message news:i4kv18$14qh$1 digitalmars.com...Is std.process.system asynchronous? Is it supposed to be? Is execv known to trick the windows command-line into giving control back to the user?Also, do either of those have any sort of known gotchas regarding redirected stdio/stderr/etc? I'm getting some odd cases of missing text in my editor's cmd-line output window when I'm messing around with rdmd. Not sure if it's just a bug with my editor or not.I've been playing around a bit (on windows) with rdmd, which uses system() heavily (and also execv for running a newly-compiled program), and I frequently get text appearing (such as a compiler error message or results from a program being rdmd'd and run) *after* I get keyboard control back with a new prompt. Which is weird. It's going to take a little more work to whittle it down to a good test case, but I thought I'd ask if anyone knew something already.
Aug 19 2010
"Nick Sabalausky" <a a.a> wrote in message news:i4kv18$14qh$1 digitalmars.com...Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course). Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In A begin 666 execv.png MB5!.1PT*& H````-24A$4 ```IL```%B" (````VA81_`````7-21T(`KLX< MZ0````1G04U!``"QCPO\804```` 8TA230``>B8``("$``#Z```` . ``'4P M``#J8 ``.I ``!=PG+I1/ ``-'Q)1$%4>%[MG6G0-4E5YRO""3\8,1\&M.U1 M)IP(-00'1Q%Q&A<4M^E9%5<& 9;%P9E!W+!G1M%F$Z3%5E 0%41L%&5KH 5! M9_('`0A ``(0 ,!N"5Q[[;57%7WG2Q/<AP`$( `!"!R7`(I^W+XG< A ``(0 M&(E 0M'O,3U^8?GXZ?&F_*OI";;<\Z(\\9[3$S_A5/[U]"1;/M$KGS0]V99[ MG<HG3]]ARKTORE/N/5TIGW(J]YF>:LJGWKG\F^D[3;GNLMQW>IHIGW91;OZT MZ>9/ORR?,=ULRF=.W^67^TU/-^6S3N6SI^\VY?Y7RRWWGV[YG%/YW,OR>=/W MN/+YT_>:\ 67Y=].SS#E^CN7?S<]TY1_?RK_8?H^O_S'Z?M-^4^G\I^G9]GR MA5[YHNG9MCS 5+YX^ %7OF1ZCBU?>BI?=BI?/OV 7[YB^B%3'GA9_LOTPZX\ M:'JN*5]Y61X\/=>4ATS/\\M#IQ\QY893^:KI^7YYV/1\4QX^_: IC[ LCYQ> MX,I73S]FRW\]E4=-M[KR-=.MMORWZ86F_/=3^1_3C_OET=-/F/*UI_*8J^5% M+LO_GE[FRK=,+S/E6Z>7V_*XBW+;XZ;;ONVR?/OT"E-N.I7'3Z_TRQ.F5YKR MQ.E5ICSI:KG]2=/M3SZ5[YA^VI:GG,I3+\JKGSJ]^CLOR].FUYAR\T7YF9NG M*^6[3N7ITVM-^>Y3N>5J>=TMT^N^YU2^=_I96YYQ45[_C.GUSSR5[[LLWS_] MG"G/NB __ZSI2GGVJ?S ] NF/.=J><-SIC?\X*G\T*G\\/1&6YY[4=[TW.E- MS[LL/S+]HBG/]\J/3K]DRPM.Y<>F7S;EUJOES;=.;W[AJ?SX]"NV_(177C3] M6UXYO>55E^7VZ2VF_/3TVZZ\>OH=6UYS*C\S_:XIK[US>=WT>Z;\[*F\?GJK M7WYN^GU3?OZR_,+T!Z:\P2MOG-YFRYM.Y1>G/_3++TU_9,HOG\J;+\NO3'_L MRJ].?V+*KUV67Y_^U)7?F/[,EM\\E=\ZE;=,;_?+;T]_;LKOG,KO3N_PR^]- M[S#EK=-?V/+[I_('TU^Z\K;IG;;\X:G\T?0NO_SQ]"Y3_F3Z*U/^]%3^;'JW M7]X^W6'*GU^6=TQWG,I?F_(7I_*7T]_8\LY3>=?TMW[YJ^GO3'GWJ=QQM;SG MCND]?WTJ?S/]O2E_>UG^;GJO*^^9WFO+WT_O,^6]%^7][YW>_[[+\O[I'TSY MAU/YP/2![1>[+D'1+W0=13>ZCJ*CZ" ZBFYU'44?2M'O/MUT]P]Z_,?]DR?( MQ=2Y^_3M04Y/CDZ.;M-T<G1R=)NIDZ/;-)T<W:7I>\S1JRZ8,U>HU=:W.P'S MP3?ZHHZBH^ H.KON[+J;[7=VW4?:=3=:JSSI;G>_:^L[1:]JQ1Y54/2[?NU; M/_SI'_CPF]\7EVN>]KZOO/W_?.'+_N\-M__CLV^Y];X/?L$_N\L-&D6_XXX[ M]GL>W3B_T_/HQO.VY]&-0?-G3JAS'IWSZ)Q'-^?4.8]^D//HM0KMZK\[_^<K MYU\9%RNZK6:OC[.O[95Q]K6Y,LXW9:Z,L_]U5\:9U^;ZN*!%>W&<O3(N^,A> M'&??M)?%N=?F/+I];:^,"PXT5\:9=UHINC7N+HZ;?66<[Z2[,LY_TUX?9]Y! MYFZ/L(INY438=3>?^M>ZV_J"HIMKW6T=>ZV[DRM[K;OYKU-T>ZV[K6 5W;X^ M7>Y^Y5IW^U^-HMN:\;7NYLTFU[I;^PL5W1JQ%[K;UT;4[0LGY/:UD7/SHN&U M[K85<G2N=>=:=WO1.SDZ.7JP3Q[LN >J["J[]WUM#M8-OH0'`E^AZ)_^N0\S MBG[]]=?_O].?>>$$WOS7%_N[WOT!UWRDI.A6`,RM:Z:8%TT4W=A)*KK1<MO< M.HINV[)_YNXU^\+>O69?VWO8_&KF[C7_OT;738[NOV/O7O/?,:_-K6ONG?CN M-?M1</>:?3.GZ+Y]<Y5[T)RY>\V]X^Y>"^H$BNY_:D^BVW?LQ7'VM;UUS:_) MW6O<O7:ZAXV[U[A[;0=WKRW)T9.GQC6*; [T]^Q].Q6*?MUG/\3(MM5RJ^OV MO^Y-)^I5BF[DW$SH_OWH=G[W=]WM.^Y^=/M?EZ.;^]%]20AR=(VBFYO1K05_ MU]V^8^]']^V;UV;+W=V/;OYKTW1S,[JM9EZX^]'M.X&BVS?]^]'M.RY'M_^U M]Z/;UT[1[5WI]DU[/[I][43=_M?\!?>CVS=MLF[O1S?_M6FZN1G=?FI>N/O1 M[3OV[C7[VMZ2;E\;4;<O[,WH[K4[CV[?L;>DV]<Y1;>?&ETW6FY?<S\Z]Z.C M[J[F$D6/&W6_,!-\)"BZK>E^8<8_,)F NQP]4'3_0+VB![ON]A=FK"GW(S.K M*;H? I^FV_?M+\S$S%%T%!U%1]%1='=&/%XW-,C1[:Y[,D</TO16BFY_,,[- M^+*B.U%?J.C^]7&FZ? WXZP_245W:;JM8W\S+E;TW*Y[,D=WOQEG[11S]%C1 M`SE?/T?W?S/.I^$KNLW1^<TX?C/N\F?CV'5GUYU=]XMKW-8^C^[.KRMS=#NM MV_/H]NXU\U__5V!M!5_1_5^!M9_ZN^[):]WU5\;97X&U9GU%3_X*;*#H9K_= MO&-WW5WQ%=V)>OPKL+9:+D</? 6VJ.BV G!E7)"CF_UV4[_MKKOUP?P$K'UA M=]V=HMLW _/H]DT4G5^!Y5= [6_!\BNP]H= =Y>CQ_>CQ6>X_;O7YIU';W:M MN\W1-7]^CNXN=[<3M_DS=Z_9%_,4W=DQ+^RU[O[ONIO_SKA[K:CH?J/FM7\> MW5=TOYK_N^[V?:?H?C7WN^[NS?C*./.1<M?=MVS/HP>>F_^Z'-U7='<JW=9W MA$;.39T/N\<77W.WAVM^8<9_4HN9RO?[I!;C?.Y)+5;8-ON;<<8WGM3"DUKL M[D%R^9CK'OA1]WOLA_[SJ[\P8Z1=\RNP*/K"^]'MY>ZUSUY#T7GV&L]>X]EK M+H_\J ]Y3&V.SM-4SZ+H]CPZ3U/E::KDZ#Q-U> ZBEZEZ,I]Z]G5['UHM8>K M[EY;\HAT38Z.HJ/H7.O.M>Y<Z\Z5<3NZ,F[+3TGG^> 73T:WE[OS?'2>C^X> MCFY>?,NI?.OT<EL>=U%N>]QTV[==%GX%EE^!Y5= WS:]T_P$[$%^!7:7BEX\ MAT\%"$ ``A" ``2V1L">CY^,6^XJ/OTY>6I"``(0 `$('!>`KY\)Q2]]LP\ M]2$``0A ``(06)] D)"CZ.MW`2U"``(0 `$T 3TF_GQ%GM:T=]XY[_9X#O9 M,69GN^0.M+XMMZ.TX*-0'B)4"YP/..OC6 AU[^S_8E#KN6V,*+E7;.^A1DA MY>V:T&)%]]_LI.A)L\G^M37]CXK=(5>H I:KK,>RT-LU#Z]=\9QK1;LF$]J" MEAUQ9B8TG5."I%850]#D0T5GA M^RAXX0\AV<]X%M ,DH7]8AM5*K3O3_S5..,L1M,0 ( EL+:BZQ.C8**)9\Q< M!5FAXQG6U;<?)>5?T+]<?<&.,($F/W(SJ:PZP>P<AR-,WU6*GK0S(]ZJ0V9P MKO53 U=3)^FJ9EQIC/M#M MRD#I>;+19'0:A2LR+RY6XJ]<T9EXK5 4RUQ_R0H:C_-XZ ;ON$.$!9R_B WJ MH^ K3\$T!X&&!&)%=P]CC9_"WN4\>F[6#M3 M0AY33'&*\J )2J_$LO!7V=&O(62,L QK^ B+%8W4"<.RN"))NE?L=/WX\?6X M29 :WS3?BX83$Z8 `($9! )%#YZM[D1]9HZ>FY>3DAS/LTD5%V86.:&)Z317 M=*72%%<GOMII;.8D1*^O,HHB**4\!W8$#OT475:F6 [)(5=4](4*6O6]J!T_ MBG[*?-RG.3M%/Y-"&Q\EVX^I!EU3]%/(*9VI."?6=YF&3RQ(.?O)D9GT,Y<? MYX:N,![D1G/**O1OD:>LT'*_)+]H*\]<- <!",0$VBOZJ)3)44;MV85Q5:T, M%K;%X1" ``0$`BAZQ?"HS;$J3%-U;P0T&P-[BPE_(0"!?1- T??=?W /`0A M``(0L 0Z*GJ\&SD&=/F4ZA Q$ 4$( `!".R. %%TY>-9`_E//Q_=C_\LBBY? M:Z;OGN(U:ZT:TKM$30A ``(0 $ K`MK[T5NU5VNGU1JB:*=8H=;SL]=GX^'L MJA_$Y?\W6!G47FS5JGX2_L*!Q>$0 `$(+ R 2Z*[DNLB\=7N*08!T<)=XO) M8JDDJ+'OFQ+JYUK,'9+TOUA9`VU&'24NJD$``A" P,8)[%C1;18^0VCC14;0 M2<E-]1D-R2(=^*]1]'B%(6PSQ",O&=?&!RCN00`"$(" DL".%;V58L4ZMXZB M"\L(S>JA*,^Y"D)TFE,5RH%%-0A ``(06)G F(I>5#LYN0]VQ6V7R"KK<N4X MXHI=+MM9+JXS["]OM! U%2 ``0A 8+\$.BKZ^E!::5[13K&"''OQ\&*%(MO> M&PE%!Z ``0A ``(K$^BBZ,6[SGS%<J]C$9+M&%*QG:KKT:K\=,WIQ;*5_=J[ MU'Q75QY/- <!"$ ``N<BT$71;3!!HNDK=U*, Z.2JI^LXW:PJU);C7V_5X3Z MR<YK;C_',T9]KL%$NQ" ``0 <$8".U9T*^2U0IL3Z>+[,QK*K3"2[Q?MH^AG M_)[0- 0 `('M$]BQHL=PJW)T=WA\U#S MF5 ``$(')Q %T6O98KVU!(KU =I$1$5( `!" Q&X/R*+B2R [$F' A ``(0 M $ _`N=7]'ZQ81D"$( `!"!P' (H^G'ZFD A``$(0&!D`BCZR+U+;!" ``0 M<!P"*/IQ^II((0`!"$! 9 (H^LB]2VP0 `$(' <`BCZ<?J:2"$``0A 8&0" M*/K(O4ML$( `!"!P' (H^G'ZFD A``$(0&!D`BCZR+U+;!" ``0 <!P"*/IQ M^II((0`!"$! 9 (H^LB]2VP0 `$(' <`BCZ<?J:2"$``0A 8&0"*/K(O4ML M$( `!"!P' (;4O0FCSR?T7,S'CPJ/.M]A ,<` $(0 `"$%A.8 >*;H*<(;IZ M-+7&D_5KC>C=HR8$( `!"$! 0V!#BBZXNQV]%#S9CI.:CJ<.!" ``0 ,1J"] MHOO"EMR=CI7/OB._;SZ5T?M&EK0;V/$;+6IVL<) HX=P( `!"$! .P364W1! MZ2T.X>2T1BE=':O]^KUQ?;M%-XH5MM/Q> (!"$ ``H,1.(2B"VEWU4JB*-C% M"P$(0 `"$.A*`$7OBA?C$( `!" ` 94(=%%T$O25>H]F( `!"$ ``I<$VBLZ ML#X!%'U]YK0(`0A ``(0:$^ EZ*[--W]2'M[W[$(`0A ``(0 , E 8Z*#F0( M0 `"$( `!%8C **OAIJ&( `!"$ ``AT)H. =X6(:`A" ``0 L!H!%+T9ZN7W M[/G/:Z]RJ_AL>&MMMOW8F62PN4?++R=318/*$( `!(Y)`$5OUN\YD:MMH%;_ MEM<9+CH>T*?L:*I!``(0*!) T4-$N1UL7WN2=80W-?4#D8LU3ZF1;ED0O, M M%_R$6W.KH:#H=L60;+?8>G&D4 $"$( `!&0"*+I6T?T$-YE9*A575L0XC5;F MQ,J!7K5%G[19]%_P9-ZFA3(TJD$``A X. $4/:OH-MV,!2Q^7TY P:"G#A. MBW.;!++8*\=Q*T7WHU V'?NO/Y":$( `!"!0)("B5RMZCNF,'+V8!">7%/Y1 MM5EO*T7/+6)J$W3.HQ>_HE2 ``0 H"2 HB= .=D3TN7X,$$L<SO523W6Y^A- M9+5V%[VVONPDBJ[\HE(-`A" 0)$`BJY5=&&?6=A(%\ZXYU8`04,:!55FZLD0 M-/9SNP)5[>KW-HJCE H0 `$(! 30-$9%><DH%P3G--%VH8`!""P$P(H^DXZ M%'U;G5*4I345= !%S^TB<-?<ML8]WD ``BT(H. )BL6[O *=J-H-%NX6$]3: M/>P1C>+6)J^:^KEL,C=B>OOI_.F4SFJ8%'<L?#A5BKZU[R'^0 `"$%A.`$5/ MI% \<EOW18&LE4]?F5KY*>_JYX;X<D7W5SS)?8*8ZHP3"L4NV-%W&%<A``$( M6 (H.B.A&0'E0J19>PL,[<C5!5%R* 0 <"P"*/JQ^IMH(0`!"$! 5 (H^J ] M(! 20-$9$Q" ``0 `($1"/12=-+T$48',4 ``A" P'X(=%1T1'T_PP!/(0`! M!" ` 1$(H. C]"(Q0 `"$( `!%!TQ `$( `!"$! ! (H^ B]2 P0 `$( `! M%)TQ``$(0 `"$!B!`(H^0B\2`P0 ``$(0 !%9PQ ``(0 `$1B" HH_0B\0` M`0A ``(00-$9`Q" ``0 `($1"*#H(_0B,4 ``A" ``10=,8`!" ``0A 8 0" M*/H(O4 ,$( `!" ``12=,0`!"$ ``A 8 0"*/D(O$ ,$( `!"$" O:*[YZ/; M%[,1=[*SQ"47R\+0:IGX*&J/C>L'S ><]7P60LCU[VQ_<I'J_=377-X+9[<P MF[,[\.PAX `$(! 0:*_HI $W,VJF2$%"JNP(7>N[H7&I.$J6&XFCSG'H[;QM M"WQA=I ]XP2]TLI.J\Y.AISCL([S7>?H&:$U]*?65%R_UD*K<=+;SNRA-2J0 MWL"Q#X'>!,ZOZ$*VEYMQW++ 3Z>$Z2GYD;^V"&:HI'T_,576%_PLAN ZOKCB M$9Q1^IGL N2Q` 1GI-:?9,8O+'IRBJM9-\C^)YG[/55D$NQVZ/DGO^>:01*/ M;3V?6D4/4/2>F[ /`0C4$EA;T:NV1 4ECF6 J.B^A >'Y]1=(Q+RLD,O5\F: M 0+Y](KMVN5.;GX/.J)8K:J"H'R:$(IN%V//M1)8+JZ6A$X13%6-6\TW(L=3 MPV'&]T)87LA :F<?ZD,``FT);$71]9-X+F<JSEPQN*20:Q*77&*D.389J:! M[B,AX<M)2)%JSKA_H'YEH%D`G5W1B_SC"IJXBN*:&[>RHOM'Q>ALU_ J&]=? M<]6\0V4(0* ' ;Z*'D\3LJ+G9OGB=!FG*?(<[=>?,<UI_!%F0/>1)G^:W5:5 M$LN+F^+21RG/.=G.C9-<)VJ8))<"LI^Y=9+07VX\6]KQN$H>6Y3/&3PU3(1E M`A9GK2J$HMNQ-=E^K'-!%Q?]=!9BA:CJWRH.?J-!*\5XXTY)^BDO&N)#A/&0 M H0 `$(+ R 2Z*+MQU$W_DU$MYMX]?+;[^O.KBM2H_3<?X]36;`:WLS[ ( M"T5?^8M$<Q" ``3.3J"+HMNH D335^[ TUB8A0K^1X%N5:6VR4:3GL=O:AIJ M;C_',T9]]E&%`Q" ``0 L#Z M3FP_5M"V]H6S&,E==Q3]F-]GHH8`!(Y,H(NB^U=R^:?/[3YYG+D&]8,ZR=Q4 MWM#V&Q)ZUV\WJ)941/_-G%>^G5;VDSR=D%?M[1]YK!,[!" ` ;$)=%'T6F2: ME+K6YL'K _3 `X#P(0"!`Q(XOZ(+B>P!^X.0(0`!"$ ``O,(G%_1Y_G-41" M-(= ``(0 `$6A'8 :*;4&>(KAY0K?%D_5HC>O>H"0$(0 `"$- 0V)"B"^YN M1R\%3[;CI*;CJ0,!"$ ``H,1:*_HOK E=Z=CY;/OR.^;3V7TOI$E[09V_$:+ MFEVL,-CH(1P(0 `"$- . ?4475!ZBT,X.:U12E?':K]^;US?;M&-8H7M=#R> MP+F+X/S+Y8H9<'$!$9]?3UY,5UP!R!OUY^I(VH4`!" ` 8,3Z*7H!\=*^!" M``0 `(&5":#H*P.G.0A ``(0 $ 7`BAZ%ZP8A0`$( `!"*Q,H*.B^V?!5XZ* MYB ``0A ``)'(]!+T8L7LAT--/%"``(0 `$NA) T;OBQ3 $( `!"$! )0)= M``(0.#B!+HJ.J!]\5!$^!" ``0BL3P!%7Y\Y+4(``A" ``3:$^BEZ"Y-=S_2 M>D>XF(8`!" ``0BL1 !%;X9Z^3U[_O/:J]PJ/AO>6IMMWW<F^5!YW[[\NBHN M*D,``A" )X`BJYG5:B95/09%P;6K SB^OX[ MC/CCQGOW>[LQWF0 A ``)' M(("B=^SE6FV.L]NB<[EEA%M);$31W0Y!$!$/Z"MV,14 ``$(* F Z"&HG 3Z M``++":#H646WB6. M[:G*B06QS)UXUDB^<-*Z5E.3*X"B?7G-H4R[<]62YR_XQD(``A" P P"*+I6 MT8O[Y,D*PAGWW H L*-1W"I9K=H#R,FY0*.XZQ!44#H_8W M `$(& )]%)TTG1&& 0 ``$(0&!-`AT5'5%?LR-I"P(0 `$#DZ HZ)S*OW M8XOP(0`!"$! 30*]%!TY7[,7:0L"$( `!"" HC,&( `!"$ ``B,0:*_HW(\^ MPK ! A ``(0V!N!]HJ^-P+X"P$(0 `"$!B!`(H^0B\2`P0 ``$(0 !%9PQ M``(0 `$1B" HH_0B\0``0A ``(00-$9`Q" ``0 `($1"*#H(_0B,4 ``A" M``10=,8`!" ``0A 8 0"*/H(O4 ,$( `!" ``12=,0`!"$ ``A 8 0"*/D(O MAE;+Q$=1>VQ</W ^X*SGLQ!"KG]G^Y.+5.^G7-,YINR"VOI*L_.JZ2$$ UP_ MWH\3%V'6:"5FK>RTZH!DR#D.ZSC M O^U\5(?`D<F<'Y%%[*]W&24S#F$F2OYD;^V"&8N(:<1FHZGOV+E9+O!<"P* M2)RN^=)2I)J3O4"BE':4GFO$0UY :!1.$UKN6Z&QG^.L&3_QTB'N1W]=Y0:Y MIM^#H'+?E]K8F4,A`('M$UA;T9/I9F[R34Z.&MF8D2-J9&9VG>0D*PR.*D7) M&0]R1T'A9,&NLJ/4?E^NXM=%(QH^<KS"NDH8/+D!&2R DJM,C8+&=>+OBV;\ MQRN&).2D2[4KDNW/<7 ( >,0Z*OHN4S+SSD$M?/3H.0LF9Q\Y?0N-]G-5FN- MNN1$(C<[:Q2BV&Z5$B<]2?*O6GX%0J+G('=B,7:AEV7%FM%NP+E6$87Z5>-? MPT3S?:SU_SAS)9%"8/L$VBNZRRH$N9*Y^%-DG*,XM9-%*! >82Z+EQ=^"!JE M;G\%% 2K^184QUO.OH:;K-#R M, 8!%+VB'X4<M,(*52$``0A ``(="*#H':!B$ (0 `$(+ Z`11]=>0T" $( M0 `"$.A `$7O`!63$( `!" ` =4)H.BK(Z=!"$ ``A" 0 <"*'H'J)B$``0 M``$(K$X`15\=.0U"``(0 `$.A! T3M Q20$( `!"$! =0(H^NK(:1 "$( ` M$%B=`(J^.G(:A `$( `!"'0 *)W (I)"$ ``A" P.H$VBOZ\N>C6PB=[,B/ M)%?RUSST6FE*4ZWM,]^4#SLO.K800JY_ _>7]%<M-SFBY*/$!4JU]8O YU68 MS7,C_L^+FJ, <$P"[17=B;'_0I[X<I^Z&;:)>/ +A86=O= ?2R;P(2==S9_+ M`0A4$>BKZ+&HQPM_88II)6:M[%21E1<Q246794^Y0IKG9-5$7]M$SKC0+PW] M1NBG5LGI3& ZKE^L'!PBM) <G?/L*UL1?$NVZ_HQ>>"2+G.Q5[4;'.4#S-G) M],JO`Z5)+ +\R5<S_>7J:-Z74VUY&1'+DA![<K&2:SVW'"GJ8K*"9J625"EE M<TK.,1RYT23>8EL!9\WXT?2C[VK1!PU,Y0JCUO^S3V$X``$(. );4?2DTB0G MEUQN),Q$29GTE5XS>\JS<)PVY1J5%5WX-"F30KNM%%UO1^8<?^NJNJQ6U92+ M ^1<4-56$T6/^]%?CL3+T-GC31B6Q94Q\R8$(+!Q`FLKNIPH"+F=^T C&S-R M1$VN.;M., AFSZJ:_,D'55PG:61/K^C)G%BY1BEV697*YI9?,]XOMMM$T7/3 M1/Q]T8Q_8;S-'GL;G\AP#P(0, 3Z*GH\?<B*'LS^214O)G:Y1N4<<;9:%V?\ M6-**JQ/_D%K[K10]YT-N$5#LERH.<B=JF,SPL[ `2K;;4-%SRQI-O!K^N2ZP M(8P&YU NWN3[.55PLWE\E&Q?D(& =XK]$BM'5?]6<5 2;W)0"<J=7(D&]>6. M](K.$G+0"BM4A0`$( `!"'0 *)W (I)"$ ``A" P.H$4/35D=, !" ``0A M. $4?77D- !"$ ``A#H0 !%[P`5DQ" ``0 `('5":#HJR.G00A ``(0 $ ' M`BAZ!ZB8A `$( `!"*Q.`$5?'3D-0 `"$( `!#H00-$[0,4D!" ``0A 8'4" M*/KJR&D0`A" ``0 T($`BMX!*B8A``$(0 `"JQ-HK^C+GX]N(72R$S\-?0;S ML_W)N5WKYY(UA!)=W/5N\3'/`D=!``(0, 3Z*GHLZO',)4RXK<2LE9U6(R89 M%^3!E_"D3;L^$%8&296=[4\2A:QD_B'%=N-PA$0P)Y/"PJ(H^<5%B8!:]J<8 M5=9"C5+.B%? D!LY\JIKH9]%7+EEQ^P^0M'// /B``1&(M!>T>WLYOYFP+)Z M+- 1[ MKB*3,"QJ0F[[C>3_G3]'/P*58U'T!4X96=#OV2O9?CC<6,QEID,LF MQTDM3TU]C9])SW,K127G.$TO'CCC*\,A$( `! R!]HH^*M9<'C9JO,0%`0A M``+[(H"B5_37PKV'BI:H" $(0 `"$* D *)7`J,Z!" ``0A 8),$NBAZPUPV M=VISDS!Q" (0 `$(' V`ET4W4331(D;K S.!IB&(0`!"$ ``JL0V*ZB<R7: M!#Y6_6 M)("BC]BKQ 0!"$ ``L<C *(?K\^)& (0 `$1B2 HH_8J\0$`0A ``+'(X"B M'Z_/B1 "$( `!$8D **/V*O$! $(0 `"QR. HA^OSXD8`A" ``1&)("BC]BK MQ 0!"$ ``L<C *(?K\^)& (0 `$1B2 HH_8J\0$`0A ``+'(X"B'Z_/B1 " M$( `!$8D **/V*O$! $(0 `"QR. HA^OSXD8`A" ``1&)("BC]BKQ 0!"$ ` M`L<C *(?K\^)& (0 `$1B307M']AZ.;U[.A=;*SQ"47B__L]MD!Z ],/F]> M?WA0,W ^X*SGLQ!"KG]G^Q,#J>66BZC63K)K&L8UN^LY$ (0&)M >T4WO-S, MUQ;!))ZT[VNJLK[ 9S$$_8I'<$;I9[(+DL<*$)R16G^2BQ5!5N./A/X20A.4 M/M>$_WWV&_7'H?"=1]&W/R'B(01V36!M1<_!*B9&KH(L\X(\^!(>5,NI>V[2 M% &[GEQP' (06)G 5A2]J#V!HL=I694\!+FFW[IFIH[KR/YH9+M*_X*$..FS M)\JY*3Z73FEDHYA?YA)390ZGF<V%*;LXFVL4J\A!K\2M%#U'M>AJ[("\$-'P M+^;BRJPT*6,+%5VI-*Z:1O4U-GODZ#Z*I)_"LBGWD?+]KCFZ+*N:Q4>\<"DN MYRN!TG[1[9A>CF=NY1%TL>VO'+? (Q>O,$YD?Y0<`G]B(<_920[(>!S**P/9 MV3WV0RNZG(..-S*(" (0 `$]D6 RY5Q^T* MQ" ``0 `($!"*#H`W0B(4 ` M`A" ``3NM)$NG%!GUYVQ` $(0 `"$- T`7+T37</SD$``A" ``24!%!T)2BJ M``(0 ,"F"21WW8VH!U?)H>B;[D6< P`$( `!"' >G3$``0A ``(0&(% >T6/ M?_2;7[$>8:00`P0 ``$(;)L`BK[M_L$["$ ``A" (Y ^Z>IDJ/KR%,+`A" 5`2+45.ZGN(64`````$E%3D2N0F"" ` end
Aug 19 2010
Nick Sabalausky Wrote:Trick what into what?Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course). Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB");Yes, the console output is buffered in symantec library. Anyway, console output is broken in phobos. I just rolled my own. Did you know, windows console supports unix-style line breaks?
Aug 20 2010
"Kagamin" <spam here.lot> wrote in message news:i4mfpe$2cjk$1 digitalmars.com...Nick Sabalausky Wrote:See the screenshot I attached to that post. That should clarify what I mean.Trick what into what?Is execv known to trick the windows command-line into giving control back to the user?Anyway, console output is broken in phobos.In what way?Did you know, windows console supports unix-style line breaks?If you mean that it'll output either "\r\n" or just "\n" as a newline, then yes. I've always been happy about that :)
Aug 20 2010
Nick Sabalausky Wrote:http://d.puremagic.com/issues/show_bug.cgi?id=2742Anyway, console output is broken in phobos.In what way?
Aug 20 2010
Nick Sabalausky Wrote:Looks like execv doesn't wait for application exit.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
Kagamin Wrote:Try to sleep after execv.Looks like execv doesn't wait for application exit.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
On 08/20/2010 01:44 PM, Kagamin wrote:Kagamin Wrote:I think a form of join/wait is more appropriate. AndreiTry to sleep after execv.Looks like execv doesn't wait for application exit.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
Andrei Alexandrescu Wrote:That should be done inside execv. If one wants to join in user code, execv should return a waitable handle. Hmm msdn says it works in posix way. The problem seems to be cmd waits on parent process and when parent exits, cmd prints command prompt, but child is still running.Try to sleep after execv.I think a form of join/wait is more appropriate.
Aug 20 2010
Kagamin Wrote:Hmm msdn says it works in posix way. The problem seems to be cmd waits on parent process and when parent exits, cmd prints command prompt, but child is still running.No, it doesn't say it works in posix way, it only says execv doesn't return.
Aug 20 2010
"Kagamin" <spam here.lot> wrote in message news:i4mif8$2p1r$1 digitalmars.com...Kagamin Wrote:execv always replaces the current process with the new one, so it never returns.Try to sleep after execv.Looks like execv doesn't wait for application exit.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
"Nick Sabalausky" <a a.a> wrote in message news:i4mmg2$a1i$1 digitalmars.com..."Kagamin" <spam here.lot> wrote in message news:i4mif8$2p1r$1 digitalmars.com...(Contrary to phobos docs: http://d.puremagic.com/issues/show_bug.cgi?id=3158 )Kagamin Wrote:execv always replaces the current process with the new one, so it never returns.Try to sleep after execv.Looks like execv doesn't wait for application exit.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
Nick Sabalausky Wrote:Also I'm not sure you can implement posix execv in windows.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).
Aug 20 2010
Nick Sabalausky Wrote:Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In ATo get expected behavior adjust console buffering with setvbuf and use system();
Aug 20 2010
Kagamin Wrote:Nick Sabalausky Wrote:system() is also a C standard function.Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In ATo get expected behavior adjust console buffering with setvbuf and use system();
Aug 20 2010
"Kagamin" <spam here.lot> wrote in message news:i4mksr$2fh$1 digitalmars.com...Nick Sabalausky Wrote:setvbuf is new to me, I'll have to look that up. I was just pointing out that streams need to be flushed before calling system() or stuff could end up out-of-order in windows. This works fine: write("In A"); // Note this doesn't automatically flush stdout.flush(); system("execB");Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In ATo get expected behavior adjust console buffering with setvbuf and use system();
Aug 20 2010
On Fri, 20 Aug 2010 02:48:51 -0400, Nick Sabalausky <a a.a> wrote:"Nick Sabalausky" <a a.a> wrote in message news:i4kv18$14qh$1 digitalmars.com...std.process.system simply calls the standard C system function. So whatever Windows does with that is the same as when you call the D version.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In Aphobos I/O is built on top of the C I/O model, which auto-flushes after newlines (I think only on consoles, but I'm not sure). -Steve
Aug 23 2010
On 8/23/10 5:14 CDT, Steven Schveighoffer wrote:On Fri, 20 Aug 2010 02:48:51 -0400, Nick Sabalausky <a a.a> wrote:Yes, to the best of my knowledge auto-flushing upon \n happens only if isatty() is true. Andrei"Nick Sabalausky" <a a.a> wrote in message news:i4kv18$14qh$1 digitalmars.com...std.process.system simply calls the standard C system function. So whatever Windows does with that is the same as when you call the D version.Is execv known to trick the windows command-line into giving control back to the user?Ok that seems to be the case. See the attached screenshot. But it works fine on Linux though (assuming you add the proper "./", of course).Something else interesting to note for anyone who didn't already know (like me), is that if you change the body of execA's main to: write("In A"); // Note this doesn't automatically flush system("execB"); Then the output is backwards (on either Windows or Linux): In B In Aphobos I/O is built on top of the C I/O model, which auto-flushes after newlines (I think only on consoles, but I'm not sure).
Aug 23 2010
On Thursday 19 August 2010 21:07:30 Nick Sabalausky wrote:Is std.process.system asynchronous? Is it supposed to be? Is execv known to trick the windows command-line into giving control back to the user? I've been playing around a bit (on windows) with rdmd, which uses system() heavily (and also execv for running a newly-compiled program), and I frequently get text appearing (such as a compiler error message or results from a program being rdmd'd and run) *after* I get keyboard control back with a new prompt. Which is weird. It's going to take a little more work to whittle it down to a good test case, but I thought I'd ask if anyone knew something already.I believe that I got some odd behavior when I used wget; IIRC, it was returning before wget actually did anything. I ended up having to use curl. I still don't know how that happened, since even if wget started a new thread, I wouldn't have expected it to terminate and return from system. Maybe it starts a new process. I don't know. But I have seen weird behavior from system before. I don't know how much of it has to do with system and how much of it has to do with the programs themselves though. - Jonathan M Davis
Aug 20 2010