pthread_atfork(3) Library Functions Manual pthread_atfork(3)

pthread_atfork - înregistrează gestionarii de bifurcări

Biblioteca de fire de execuție POSIX (libpthread, -lpthread)

#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void),
                   void (*child)(void));

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).

Î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.

Nu s-a putut aloca memorie pentru a înregistra intrarea în lista de gestionare a bifurcărilor.

POSIX.1-2008.

POSIX.1-2001.

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.

fork(2), atexit(3), pthreads(7)

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