[so] (no subject)

Vlad Dogaru ddvlad at herebedragons.ro
Mon Mar 23 09:59:15 EET 2015


On Mon, Mar 23, 2015 at 07:36:32AM +0000, Sebastian ENE via so wrote:
> Salut,
> 
> Am si eu o intrebare daca puteti sa ma lamuriti va rog :
> 
> Pe Linux intr-un process copil aloc memorie inainte de a executa execv().
> Dupa ce am executat execv() toata memoria procesului copil se suprascrie
> (asta inclusive heap-ul in urma alocarilor cu malloc, calloc..)
> 1.Apelul free() dupa execv() nu mai are sens deoarece s-a suprascris
> intreaga zona de memorie nu?

După un execv() cu succes nu se mai execută nimic din codul de după.
Deci dacă pui free() după nu are sens, pentru că nu se ajunge la el.

Are sens să apelezi free dacă execv() eșuează, dar nu cred că asta
întrebai.

> 2.File descriptorii deschisi inainte de execv() se pierd, dar
> structurile aferente procesului care fac legatura cu inode-urile
> raman?

File descriptorii nu se pierd decât dacă au flag-ul close on exec [1].
Ceilalți rămân.  This makes sense if you think about it, poți moșteni,
at the very least, stdin, stdout și stderr, ca să nu te trezești că ai
executat un program redirectat într-un fișier și apoi el face exec()
altuia care începe să scrie la consolă.

[1] http://stackoverflow.com/questions/6125068/what-does-the-fd-cloexec-fcntl-flag-do

> 3.Pe Windows trebuie sa dealocam memoria pentru parametrii in linie de
> comanda trimisi catre CreateProcess() din procesul parinte pentru a
> evita memory leak-uri ?

Asta nu știu.

Vlad


More information about the so mailing list