<div class="gmail_quote">2011/5/25 Drutu Bogdan <span dir="ltr">&lt;<a href="mailto:bogdandrutu@gmail.com">bogdandrutu@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

2011/5/25 Cosmin Stefan-Dobrin &lt;<a href="mailto:cosminstefanxp@gmail.com">cosminstefanxp@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Revin si cu un &quot;screen&quot; al ce se intampla, pentru a reliefa mai bine (in<br>
&gt; paranteza dupa debug e threadID si la handle-uri sunt handle-urile (primul<br>
&gt; hRead, al doilea hWrite):<br>
&gt;<br>
&gt;&gt; echo &quot;test&quot; | cat | nl<br>
&gt; [DEBUG][3484] Command successfully read: echo &quot;test&quot; | cat | nl<br>
&gt;<br>
&gt; [DEBUG][3484] Parallel command detected<br>
&gt; [DEBUG][3484] Piped Command detected.<br>
&gt; [DEBUG][3484] Created pipe with handle (2016,1996)<br>
&gt; [DEBUG][3484]   Created threads 3488 - 3492<br>
&gt; [DEBUG][3488] Thread started with command tree: 00322B20<br>
&gt; [DEBUG][3488] Parallel command detected<br>
&gt; [DEBUG][3488] Piped Command detected.<br>
&gt; [DEBUG][3488] Created pipe with handle (1984,1976)<br>
&gt; [DEBUG][3488]   Created threads 3496 - 3500<br>
&gt; [DEBUG][3492] Thread started with command tree: 00322B90<br>
&gt; [DEBUG][3492] Simple command detected...<br>
&gt; [DEBUG][3492] Verb:<br>
&gt;                 nl<br>
&gt; [DEBUG][3492] Full parameters list: nl<br>
&gt; [DEBUG][3492] Preparing redirections...<br>
&gt; [DEBUG][3492] ---------------------------------------------------------<br>
&gt; [DEBUG][3492]   Closing IN handle 2016<br>
&gt; [DEBUG][3496] Thread started with command tree: 00322A88<br>
&gt; [DEBUG][3496] Simple command detected...<br>
&gt; [DEBUG][3496] Verb:<br>
&gt;                 echo<br>
&gt; [DEBUG][3496] Full parameters list: echo  &quot;test&quot;<br>
&gt; [DEBUG][3496] Preparing redirections...<br>
&gt; [DEBUG][3496] ---------------------------------------------------------<br>
&gt; [DEBUG][3496]   Closing OUT handle 1976<br>
&gt; [DEBUG][3500] Thread started with command tree: 00322B00<br>
&gt; [DEBUG][3500] Simple command detected...<br>
&gt; [DEBUG][3500] Verb:<br>
&gt;                 cat<br>
&gt; [DEBUG][3500] Full parameters list: cat<br>
&gt; [DEBUG][3500] Preparing redirections...<br>
&gt; [DEBUG][3500] ---------------------------------------------------------<br>
&gt;      1  test<br>
&gt; [DEBUG][3500]   Closing IN handle 1984<br>
&gt; [DEBUG][3500]   Closing OUT handle 1996<br>
&gt; [DEBUG][3496] ---------------------------------------------------------<br>
&gt; [DEBUG][3496] Process returned 0<br>
&gt; [DEBUG][3488] Thread 0 finished with return value 0.<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Cosmin<br>
&gt;<br>
&gt;<br>
&gt; 2011/5/25 Cosmin Stefan-Dobrin &lt;<a href="mailto:cosminstefanxp@gmail.com">cosminstefanxp@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; Salutare,<br>
&gt;&gt;<br>
&gt;&gt; Am si eu o mica problema cu pipe-urile pe Windows si nu reusesc sa-mi dau<br>
&gt;&gt; seama ce are. Ei bine, ideea e ca pana acum totul ne merge bine, mai putin<br>
&gt;&gt; cazul in care avem mai mult de 2 pipe-uri inlantuite. Daca avem: &#39;echo ana |<br>
&gt;&gt; nl&#39; totul e ok. In schimb daca avem &#39;echo ana | cat | nl&#39;, operatia o face<br>
&gt;&gt; cu succes, dar nu se termina. Procesul lui echo se inchide, in schimb<br>
&gt;&gt; celelalte 2 nu. Deci probabil ele inca mai asteapta ceva pe Pipe-uri, desi<br>
&gt;&gt; eu zic ca le-am inchis cum trebuie (Altfel nu se termina nici pentru 2<br>
&gt;&gt; pipe-uri).<br>
&gt;&gt;<br>
&gt;&gt; Ideea e ca noi am folosit threaduri. Cand dam peste o comanda paralela,<br>
&gt;&gt; sunt create doua threaduri, fiecare ocupandu-se de o jumate de arbore. In<br>
&gt;&gt; fiecare moment fiecare thread (inclusiv cel principal) stie ce handle-uri<br>
&gt;&gt; are pentru in/out/err. Initial acestea sunt stdin/out/err, dar atunci cand<br>
&gt;&gt; creez un pipe, ii comunic thrreadului ca , de exemplu, out-ul lui e<br>
&gt;&gt; handle-ul cutare. Threadul, dupa ce va crea procesul ce executa comanda,<br>
&gt;&gt; daca stie ca un cap e pipe, il inchide.<br>
&gt;&gt;<br>
&gt;&gt; Din codul de debug pe care il am se vede ca pe procesul parinte (cu<br>
&gt;&gt; threaduri cu tot) se inchid toate cele 4 capete ale celor 2 pipe-uri create<br>
&gt;&gt; (in cazul exemplului de mai sus), dar tot nu se inchid procesele spawn-uite.<br>
&gt;&gt;<br>
&gt;&gt; Conteaza ordinea in care sunt inchise pipe-urile (atat timp cat sunt<br>
&gt;&gt; inchise de thread dupe ce creaza procesul comenzii si inainte sa il<br>
&gt;&gt; astepte)?<br>
&gt;&gt; Exista vreun flag necesar pentru a trimite pe pipe EOF cand se inchide<br>
&gt;&gt; Handle-ul?<br>
<br>
</div></div>Trebuie sa inchizi capetele pipe-urilor si in procesul parinte, pentru<br>
ca ele raman deschise si asta poate fi un motiv pentru care celelalte<br>
procese cred ca mai au de unde sa primeasca date si nu se termina.<br>
(Adica nu primesc eventul de pipe closed si raman blocate in read).<br>
<br></blockquote><div>Pai daca inchid in thread, nu e ok? Nu am mai multe procese... threadurile si procesul parinte partajeaza handlerele by default, nu?<br><br>Cosmin <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


&gt;&gt;<br>
&gt;&gt; Thanks a lot,<br>
&gt;&gt; Cosmin<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; <a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a><br>
&gt;<br>
<font color="#888888"><br>
<br>
<br>
--<br>
Bogdan.<br>
_______________________________________________<br>
<a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a><br>
</font></blockquote></div><br>