sigreturn(2) System Calls Manual sigreturn(2) NUME sigreturn, rt_sigreturn, rt_sigreturn - returneaza de la gestionarul de semnal i curaa cadrul stivei BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT int sigreturn(...); DESCRIERE Daca nucleul Linux determina ca un semnal deblocat este in ateptare pentru un semnal de proces, atunci, la urmatoarea tranziie inapoi la modul utilizator in acel proces (de ex. de exemplu, la revenirea de la un apel de sistem sau atunci cand procesul este reprogramat pe CPU), acesta creeaza un nou cadru pe stiva din spaiul de utilizator in care salveaza diferite elemente ale contextului procesului (cuvant de stare al procesorului, registre, semnal masca i parametrii stivei de semnale). De asemenea, nucleul face in aa fel incat, in timpul tranziiei inapoi la modul utilizator, sa fie apelat gestionarul de semnal i, la revenirea de la gestionarul de semnal, controlul sa treaca la o bucata de cod din spaiul utilizatorului, numita in mod obinuit ,,trambulina de semnal". La randul sau, codul de trambulina de semnal apeleaza sigreturn(). Acest apel sigreturn() anuleaza tot ceea ce s-a facut--modificarea matii de semnal a procesului, comutarea stivei de semnale (a se vedea sigaltstack(2))----pentru a invoca gestionarul de semnal. Utilizand informaiile care au fost salvate anterior pe stiva din spaiul utilizatorului, sigreturn() restabilete masca de semnal a procesului, schimba stivele i restabilete contextul procesului (fanioanele i registrele procesorului, inclusiv indicatorul de stiva i indicatorul de instruciuni), astfel incat procesul ii reia execuia in punctul in care a fost intrerupt de semnal. VALOAREA RETURNATA sigreturn() nu returneaza niciodata. VERSIUNI Multe sisteme de tip UNIX au un apel de sistem sigreturn() sau aproape echivalent. Cu toate acestea, acest apel nu este specificat in POSIX, iar detaliile privind comportamentul sau variaza de la un sistem la altul. STANDARDE Niciunul. NOTE sigreturn() exista doar pentru a permite implementarea gestionarilor de semnal. Nu ar trebui niciodata sa fie apelat direct. (Intr-adevar, un simplu sigretreturn() din biblioteca GNU C returneaza pur i simplu -1, cu errno configurata la ENOSYS). Detaliile privind argumentele (daca exista) transmise catre sigretreturn() variaza in funcie de arhitectura. (Pe unele arhitecturi, cum ar fi x86-64, sigretreturn() nu accepta niciun argument, deoarece toate informaiile de care are nevoie sunt disponibile in cadrul stivei care a fost creata anterior de catre nucleu pe stiva din spaiul utilizatorului). Mai demult, sistemele UNIX plasau codul de trambulina de semnal pe stiva utilizatorului. In prezent, paginile din stiva utilizatorului sunt protejate astfel incat sa nu permita executarea de cod. Astfel, pe sistemele Linux contemporane, in funcie de arhitectura, codul de trambulina de semnal se afla fie in vdso(7), fie in biblioteca C. In acest din urma caz, funcia de invaluire sigaction(2) a bibliotecii C informeaza nucleul cu privire la locaia codului de trambulina prin plasarea adresei sale in campul sa_restorer al structurii sigaction i activeaza fanionul SA_RESTORER in campul sa_flags. Informaiile salvate despre contextul procesului sunt plasate intr-o structura ucontext_t (a se vedea ). Aceasta structura este vizibila in cadrul gestionarului de semnal ca al treilea argument al unui gestionar stabilit prin sigaction(2) cu fanionul SA_SIGINFO. Pe alte sisteme UNIX, funcionarea trambulinei de semnal difera puin. In special, pe unele sisteme, la revenirea la modul utilizator, nucleul transmite controlul catre trambulina (mai degraba decat catre gestionarul de semnal), iar codul trambulinei apeleaza gestionarul de semnal (i apoi apeleaza sigreturn() odata ce gestionarul returneaza). Diferene intre biblioteca C i nucleu Apelul de sistem original din Linux a fost numit sigreturn(). Cu toate acestea, odata cu adaugarea semnalelor in timp real in Linux 2.2, a fost adaugat un nou apel de sistem, rt_sigreturn(), pentru a suporta un tip sigset_t extins. Biblioteca GNU C ne ascunde aceste detalii, utilizand in mod transparent rt_sigreturn() atunci cand nucleul il furnizeaza. CONSULTAI I kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 sigreturn(2)