[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