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)

REZUMAT

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

30 martie 2023 Pagini de manual de Linux 6.05.01