[so] [Tema2][Windows] Parametru CreatePipe
Cotet Teodor Mihai
teodor.cotet at gmail.com
Tue Apr 4 01:58:02 EEST 2017
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:
Din cauza diferenței între Windows și Linux la crearea de noi procese (
CreateProcess vs. fork + exec), 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 CreateProcess de pe Windows.
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).
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)?
Teo
2017-04-03 23:17 GMT+03:00 Cotet Teodor Mihai <teodor.cotet at gmail.com>:
> Salut,
>
> Pe windows avem voie sa apelam CreateProcess pe executabilul nostru
> (minishell)?
>
> 2017-04-03 11:24 GMT+03:00 Costin Lupu via so <so at cursuri.cs.pub.ro>:
>
>> On Mon, 2017-04-03 at 10:48 +0300, Theodor Stoican wrote:
>> > Pe 3 aprilie 2017, 10:01, Costin Lupu <costin.lup at gmail.com> a scris:
>> > On Mon, 2017-04-03 at 09:42 +0300, Theodor Stoican via so
>> > wrote:
>> > > Salut,
>> > >
>> > >
>> > >
>> > > > Aici e o problemă. Subcomenzile a, b și c *trebuie* să
>> > ruleze în
>> > > > paralel. De altfel ne putem gândi la operatorul '|' ca la
>> > un operator de
>> > > > paralelizare, cu diferența că subcomenzile comunică între
>> > ele
>> > >
>> > >
>> > > Se vrea acest comportament doar pentru comenzile externe? Nu
>> > vad cum
>> > > ai putea respecta acest comportament pentru cd, fara sa
>> > deschizi
>> > > thread-uri.
>> >
>> > Fix ca în cazul operatorului de paralelizare, și pentru
>> > operatorul pipe
>> > procesele pornesc în paralel și se pot termina în orice
>> > ordine. Nu ai
>> > nevoie de thread-uri. Nu înțeleg de unde vine nelămurirea ta,
>> > mai am
>> > nevoie de niște clarificări în sensul ăsta.
>> >
>> > Ia spre exemplu comanda: 'cd | echo foo'. Subcomanda 'echo
>> > foo' nici
>> > măcar nu citește de la stdin.
>> >
>> > Nu inteleg cum poti lansa cele 2 procese in paralel fara sa pornesti
>> > threaduri.
>>
>> Păi și thread-urile alea nu tot secvențial le pornești?
>>
>> > Singura varianta pe care o vad e sa transformi functia intr-un
>> > executabil si sa i-l dai ca parametru lui CreateProcess. Altfel
>> > parcurgerea arborelui e inerent secventiala. Imi scapa ceva?
>>
>> Cred că tu te gândești să pornești procesele fix în același timp. Ori
>> asta ar fi posibil doar pe sistemele multiprocesor și doar dacă
>> kernel-ul ți-ar furniza un astfel de syscall (de care eu n-am auzit).
>> Ori mini-shell-ul (ca și bash-ul) pornește comenzi în paralel indiferent
>> de numărul de procesoare de pe sistem.
>>
>> Costin
>>
>>
>>
>> _______________________________________________
>> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20170404/8d1d2285/attachment.html>
More information about the so
mailing list