exit(3)

NUME
exit - provoacă încheierea normală a procesului

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <stdlib.h>

[[noreturn]] void exit(int status);

DESCRIERE
Funcția exit() provoacă terminarea normală a procesului, iar cel mai puțin semnificativ octet din status (de exemplu, status & 0xFF) este returnat părintelui (a se vedea wait(2)).

Toate funcțiile înregistrate cu atexit(3) și on_exit(3) sunt apelate, în ordinea inversă a înregistrării lor; (este posibil ca una dintre aceste funcții să utilizeze atexit(3) sau on_exit(3) pentru a înregistra o funcție suplimentară care să fie executată în timpul procesării de ieșire; noua înregistrare este adăugată în fruntea listei de funcții care rămân să fie apelate). Dacă una dintre aceste funcții nu returnează (de exemplu, apelează _exit(2) sau se sinucide cu un semnal), atunci niciuna dintre funcțiile rămase nu este apelată, iar procesarea ulterioară a ieșirii (în special, golirea fluxurilor stdio(3)) este abandonată. În cazul în care o funcție a fost înregistrată de mai multe ori cu ajutorul atexit(3) sau on_exit(3), atunci aceasta este apelată de atâtea ori câte ori a fost înregistrată.

Toate fluxurile stdio(3) deschise sunt golite și închise. Fișierele create de tmpfile(3) sunt eliminate.

Standardul C specifică două constante, EXIT_SUCCESS și EXIT_FAILURE, care pot fi transmise la exit() pentru a indica terminarea cu succes sau, respectiv, fără succes.

VALOAREA RETURNATĂ
Funcția exit() nu returnează.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
exit() | Siguranța firelor | MT-Unsafe race:exit

Funcția exit() utilizează o variabilă globală care nu este protejată, deci nu este sigură pentru fire de execuție.

STANDARDE
C11, POSIX.1-2008.

ISTORIC
C89, POSIX.1-2001, SVr4, 4.3BSD.

NOTE
Comportamentul este nedefinit în cazul în care una dintre funcțiile înregistrate cu atexit(3) și on_exit(3) apelează fie exit(), fie longjmp(3). Rețineți că un apel la execve(2) elimină înregistrările create cu ajutorul atexit(3) și on_exit(3).

Utilizarea lui EXIT_SUCCESS și EXIT_FAILURE este puțin mai ușor de adaptat (în medii non-UNIX) decât utilizarea lui 0 și a unor valori diferite de zero, cum ar fi 1 sau -1. În special, VMS utilizează o convenție diferită.

BSD a încercat să standardizeze codurile de ieșire (pe care unele biblioteci C, cum ar fi biblioteca GNU C, le-au adoptat de asemenea); a se vedea fișierul <sysexits.h>.

După exit(), starea de ieșire trebuie să fie transmisă procesului părinte. Există trei cazuri:

•   În cazul în care părintele a stabilit SA_NOCLDWAIT sau a stabilit gestionarul SIGCHLD la SIG_IGN, starea este eliminată și copilul moare imediat.

•   În cazul în care părintele aștepta copilul, acesta este notificat cu privire la starea de ieșire și copilul moare imediat.

•   În caz contrar, procesul copil devine un proces „zombi”, majoritatea resurselor procesului sunt reciclate, dar în tabela de procese se păstrează un slot care conține informații minime despre procesul copil (starea de terminare, statistici de utilizare a resurselor). Acest lucru permite părintelui să utilizeze ulterior waitpid(2) (sau similar) pentru a afla starea de terminare a procesului copil; în acel moment, slotul procesului „zombi” este eliberat.

În cazul în care implementarea acceptă semnalul SIGCHLD, acest semnal este trimis părintelui. În cazul în care părintele a definit SA_NOCLDWAIT, acesta nu se definește dacă se trimite un semnal SIGCHLD.

  Semnale trimise către alte procese
În cazul în care procesul care iese este un lider de sesiune și terminalul său de control este terminalul de control al sesiunii, atunci fiecare proces din grupul de procese din prim-plan al acestui terminal de control primește un semnal SIGHUP, iar terminalul este disociat de această sesiune, permițând ca acesta să fie achiziționat de un nou proces de control.

În cazul în care ieșirea procesului face ca un grup de procese să devină orfan și dacă oricare membru al grupului de procese nou-orfan este oprit, atunci un semnal SIGHUP urmat de un semnal SIGCONT va fi trimis fiecărui proces din acest grup de procese. A se vedea setpgid(2) pentru o explicație privind grupurile de procese orfane.

Cu excepția cazurilor de mai sus, în care procesele semnalate pot fi copii ai procesului care se termină, terminarea unui proces nu determină în general trimiterea unui semnal către copiii acelui proces. Cu toate acestea, un proces poate utiliza operația prctl(2) PR_SET_PDEATHSIG pentru a face în așa fel încât să primească un semnal în cazul în care părintele său termină.

CONSULTAȚI ȘI
_exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.