<div dir="ltr"><div><div><div>Adica nu vad altfel cum as putea ajunge sa execut in paralel comenzi (fara threaduri), decat apeland CreateProcess pe propia-mi tema si sunt derutat pentru ca in tema se specifica ca nu pot apela execv pe propia-mi tema si (ok scrie execv nu CreateProcess), dar mai scrie si asta:<br><br>Din cauza diferenței între Windows și Linux la crearea de noi procese (<code>CreateProcess</code> vs. <code>fork</code> + <code>exec</code>),
 s-ar putea să nu puteți folosi același tip de parcurgere a arborelui 
sintactic și pe Windows și pe Linux. Dacă vreți să reutilizați 
concepte/cod de pe Linux pe Windows, concepeți parcurgerea să 
funcționeze și cu funcția <code>CreateProcess</code> de pe Windows.<br><br></div>Din asta ar reiesi ca exista o metoda de implentare pe linux care creeaza procese in maniera CreateProcess (fork + exec), dar eu daca fac CreateProccess(minishell) pe windows, ar implica ca fac execv(minishell) pe Linux, cea ce e interzis. Asadar din enuntul temei ar reiesi ca nu prea am voie sa fac CreateProcess(minishell).<br><br></div>In fine, am scris asta ca sa intelegi mai bine nedumerirea mea, intrebarea finala e cam aceeasi, pot face CreatePorcess pe propria-mi tema, sau exista alta metoda (fara threaduri) de a executa comenzi in paralel (dau createprocess pe altceva)?<br><br></div>Teo<br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-04-03 23:17 GMT+03:00 Cotet Teodor Mihai <span dir="ltr"><<a href="mailto:teodor.cotet@gmail.com" target="_blank">teodor.cotet@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Salut,<br><br></div>Pe windows avem voie sa apelam CreateProcess pe executabilul nostru (minishell)? <br><div><div class="h5"><div><div><div class="gmail_extra"><br><div class="gmail_quote">2017-04-03 11:24 GMT+03:00 Costin Lupu via so <span dir="ltr"><<a href="mailto:so@cursuri.cs.pub.ro" target="_blank">so@cursuri.cs.pub.ro</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_3753330543021315725m_9205437572457262904HOEnZb"><div class="m_3753330543021315725m_9205437572457262904h5">On Mon, 2017-04-03 at 10:48 +0300, Theodor Stoican wrote:<br>
> Pe 3 aprilie 2017, 10:01, Costin Lupu <<a href="mailto:costin.lup@gmail.com" target="_blank">costin.lup@gmail.com</a>> a scris:<br>
>         On Mon, 2017-04-03 at 09:42 +0300, Theodor Stoican via so<br>
>         wrote:<br>
>         > Salut,<br>
>         ><br>
>         ><br>
>         ><br>
>         > > Aici e o problemă. Subcomenzile a, b și c *trebuie* să<br>
>         ruleze în<br>
>         > > paralel. De altfel ne putem gândi la operatorul '|' ca la<br>
>         un operator de<br>
>         > > paralelizare, cu diferența că subcomenzile comunică între<br>
>         ele<br>
>         ><br>
>         ><br>
>         > Se vrea acest comportament doar pentru comenzile externe? Nu<br>
>         vad cum<br>
>         > ai putea respecta acest comportament pentru cd, fara sa<br>
>         deschizi<br>
>         > thread-uri.<br>
><br>
>         Fix ca în cazul operatorului de paralelizare, și pentru<br>
>         operatorul pipe<br>
>         procesele pornesc în paralel și se pot termina în orice<br>
>         ordine. Nu ai<br>
>         nevoie de thread-uri. Nu înțeleg de unde vine nelămurirea ta,<br>
>         mai am<br>
>         nevoie de niște clarificări în sensul ăsta.<br>
><br>
>         Ia spre exemplu comanda: 'cd | echo foo'. Subcomanda 'echo<br>
>         foo' nici<br>
>         măcar nu citește de la stdin.<br>
><br>
> Nu inteleg cum poti lansa cele 2 procese in paralel fara sa pornesti<br>
> threaduri.<br>
<br>
</div></div>Păi și thread-urile alea nu tot secvențial le pornești?<br>
<span><br>
> Singura varianta pe care o vad e sa transformi functia intr-un<br>
> executabil si sa i-l dai ca parametru lui CreateProcess. Altfel<br>
> parcurgerea arborelui e inerent secventiala. Imi scapa ceva?<br>
<br>
</span>Cred că tu te gândești să pornești procesele fix în același timp. Ori<br>
asta ar fi posibil doar pe sistemele multiprocesor și doar dacă<br>
kernel-ul ți-ar furniza un astfel de syscall (de care eu n-am auzit).<br>
Ori mini-shell-ul (ca și bash-ul) pornește comenzi în paralel indiferent<br>
de numărul de procesoare de pe sistem.<br>
<br>
Costin<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
<a href="http://ocw.cs.pub.ro/courses/so/info/lista-discutii" rel="noreferrer" target="_blank">http://ocw.cs.pub.ro/courses/s<wbr>o/info/lista-discutii</a></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div><br></div>