[so] Procese in paralel
Catalin Iacob
iacobcatalin at gmail.com
Tue Oct 30 20:02:11 EET 2007
On Tuesday 30 October 2007 19:33:30 Alexandru Mosoi wrote:
> nu prea e adevarat ce zici tu... sau cel putin bash-ul meu nu se
> comporta asa. incearca sa executi comenzile:
>
> while `true`; do sleep 1; done & true; printf "bla"
> si
> while `true`; do sleep 1; done; printf "bla"
>
> ai sa vezi ca a afisat "bla", desi primul proces (while...) nu s-a
> terminat. se pare ca atunci cand apare operatorul & precesele ruleaza
> in background (pana cand m-am apucat de tema la so stiam ca & e
> folosit pentru a rula un program in background).
Ai dreptate, in bash & e pentru rulare in background.
> tu spui ca printf "bla" nu trebuie executat inainte sa se termine
> bucla infinita, ceea ce bash nu respecta. pana la urma, ce
> comportament trebuie sa implementam?
La tema e pentru rulare in paralel deci nu e echivalent cu cel din bash.
Seamana cumva in sensul ca efectele sunt asemanatoare in unele situatii. In
tema daca dai A & B se pornesc A si B in paralel si se asteapta grupul cum am
zis. In bash daca dai A& B se porneste A in background si apoi imediat B
(fiindca A e in background) si se asteapta grupul. Ceea ce duce la acelasi
comportament. In bash poti sa dai si A& B& ceea ce va intoarce imediat
prompt-ul (A si B in fundal); in tema nu se poate asta.
In bash & e unar si postfixat. In tema & e binar si infixat.
In exemplul tau
while `true`; do sleep 1; done & true; printf "bla"
bash porneste comanda compusa
while `true`; do sleep 1; done
in fundal si apoi se face true (imediat fiindca cealalta e in fundal) si dupa
true printf bla deci e normal sa apara bla.
Pe scurt, la A & B bash si tema au acelasi comportament dar nu-s deloc acelasi
lucru.
P.S. Am vazut reply-ul cum ca ai inteles dar am zis sa raspund pentru
altcineva care poate e in continuare nelamurit :-).
Catalin
More information about the so
mailing list