pthread_atfork(3) | Library Functions Manual | pthread_atfork(3) |
NUME
pthread_atfork - înregistrează gestionarii de bifurcări
BIBLIOTECA
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)
SINOPSIS
#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
DESCRIERE
Funcția pthread_atfork() înregistrează gestionarii de bifurcare care urmează să fie executați atunci când fork(2) este apelat de orice fir dintr-un proces. Gestionatorii sunt executați în contextul firului care apelează fork(2).
Se pot înregistra trei tipuri de gestionari:
- •
- prepare specifică un gestionar care este executat în procesul părinte înainte de începerea procesării fork(2).
- •
- parent specifică un gestionar care este executat în procesul părinte după terminarea procesării fork(2).
- •
- child specifică un gestionar care este executat în procesul-copil după terminarea procesării fork(2).
Oricare dintre cele trei argumente poate fi NULL în cazul în care nu este necesar nici un gestionar în faza corespunzătoare a procesării fork(2).
VALOAREA RETURNATĂ
În caz de succes, pthread_atfork() returnează zero. În caz de eroare, returnează un număr de eroare. pthread_atfork() poate fi apelat de mai multe ori de către un proces pentru a înregistra gestionari suplimentari. Operatorii pentru fiecare fază sunt apelați într-o ordine specificată: operatorii prepare sunt apelați în ordinea inversă a înregistrării; operatorii parent și child sunt apelați în ordinea înregistrării.
ERORI-IEȘIRE
- ENOMEM
- Nu s-a putut aloca memorie pentru a înregistra intrarea în lista de gestionare a bifurcărilor.
STANDARDE
POSIX.1-2008.
ISTORIC
POSIX.1-2001.
NOTE
Atunci când fork(2) este apelat într-un proces cu mai multe fire de execuție, numai firul de execuție care face apelul este duplicat în procesul-copil. Intenția inițială a pthread_atfork() a fost de a permite revenirea procesului-copil la o stare coerentă. De exemplu, în momentul apelului la fork(2), este posibil ca alte fire să aibă mutex-uri blocate care sunt vizibile în memoria din spațiul utilizatorului duplicată în procesul-copil. Astfel de mutex-uri nu vor fi niciodată deblocate, deoarece firele care au plasat blocajele nu sunt duplicate în copil. Intenția lui pthread_atfork() a fost de a oferi un mecanism prin care aplicația (sau o bibliotecă) să se asigure că starea mutex-urilor și a altor procese și fire de execuție va fi readusă la o stare coerentă. În practică, această sarcină este, în general, prea dificilă pentru a fi realizabilă.
După ce un fork(2) într-un proces cu mai multe fire de execuție returnează în copil, copilul ar trebui să apeleze numai funcții asincrone sigure pentru semnale (a se vedea signal-safety(7)) până în momentul în care apelează execve(2) pentru a executa un nou program.
POSIX.1 specifică faptul că pthread_atfork() nu trebuie să eșueze cu eroarea EINTR.
CONSULTAȚI ȘI
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 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.
2 mai 2024 | Pagini de manual de Linux 6.8 |