Scroll to navigation

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

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