[so] CreateProcess

Catalin Alexandru so@cursuri.cs.pub.ro
Mon, 1 Nov 2004 23:31:33 +0200


> CreateProcess() este suficient. Modul de tratare a 
> cmd1|cmd2|cmd3 este identic cu cel cmd1&cmd2&cmd3, doar ca 
> trebuie sa setezi stdin si stdout corespunzator.

De fapt problema se vede mai bine pe alt exemplu:

	cmd1 && cmd2 & cmd3 && cmd4

Din cate inteleg eu, arborele care o sa rezulte in urma parsarii o sa arate
cam asa:

           --- & ---
          /         \
         /           \
        &&            &&
       /  \          /  \
      /    \        /    \
   cmd1    cmd2  cmd3    cmd4

Daca se incearca executarea din cadrul unui singur proces, prima comanda
lansata 
va fi cmd1. Daca astept terminarea sa pentru a lansa cmd2 (ceea ce trebuie
sa fac
pentru ca "&&" e secventiala) nu o sa pot lansa cmd3 decat abia dupa ce
lansez
cmd2.

Problema este ca cele doua ramuri care vin din radacina trebuie pornite
deodata (adica
cmd1 && cmd2 trebuie pornit o data cu cmd3 && cmd4). Treaba asta nu se poate
face decat
din doua procese diferite (dar e complicat pentru ca trebuie transmis cumva
arborele 
intre procese) sau din doua thread-uri diferite (dar astea cred ca sunt la
alta tema).

Ar mai fi o solutie, programarea executiilor cu ajutorul unui graf orientat,
dar as 
vrea sa fiu sigur care e ideea inainte sa ma apuc sa modific ce am scris
pana acum.

Catalin