[so] ExitProcess vs. exit pe Windows

Lucian Adrian Grijincu lucian.grijincu at gmail.com
Thu Mar 18 14:48:47 EET 2010


Salut,

Am văzut în textul laboratoarelor o greșeală: apelul lui "ExitProcess"
când "exit" ar fi fost corect.

Un exemplu:

processHeap = GetProcessHeap();
if (NULL == processHeap) {
	fprintf(stderr, "GetProcessHeap failed with error %ud.\n", GetLastError());
	ExitProcess(-1);
}


ExitProcess (http://msdn.microsoft.com/en-us/library/ms682658(VS.85).aspx)
face multe, dar nu se ocupă de eliberarea resurselor bibliotecii
standard C.

ExitProcess este apelată și din Pascal (Dephi) și din C# și Java, etc.
când se termină execuția. Prin urmare nu are de unde să știe de
resursele bibliotecii standard C: e posibil ca în mediile amintite
acestea să nu existe.


În exemplul de mai sus procesul utilizează obiectul "stderr" (deci
utilizează resurse puse la dispoziție de stdlibc). Pentru a asigura o
finalizare corectă a programului trebuie apelat "exit" care, printre
altele, apelează fflush(stdout), fflush(stderr) și eliberează orice
alte resurse care sunt administrate intern de biblioteca standard C,
DUPĂ care apelează ExitProcess().


Similar, pe Linux există _exit() ca echivalent al lui ExitProcess().
_exit() se ocupă doar de efectuarea apelului de sistem de încheiere a
execuției; exit() eliberează resursele stdlibc, după care apelează
_exit().

-- 
 .
..: Lucian


More information about the so mailing list