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(typeof(void (void)) *prepare,
                   typeof(void (void)) *parent,
                   typeof(void (void)) *child);

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
fork(2), atexit(3), pthreads(7)

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