Scroll to navigation

PTHREAD_ATFORK(3) Library Functions Manual PTHREAD_ATFORK(3)

NUME

pthread_atfork - înregistrează gestionarii care vor fi apelați la momentul executării lui fork(2)

REZUMAT

#include <pthread.h>

int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));

DESCRIERE

pthread_atfork înregistrează funcțiile de gestionare pentru a fi apelate chiar înainte și imediat după ce un nou proces este creat cu fork(2). Gestionarul prepare va fi apelat din procesul părinte, chiar înainte de crearea noului proces. Gestionarul parent va fi apelat din procesul părinte, chiar înainte ca fork(2) să returneze. Gestionatorul child va fi apelat de către procesul copil, chiar înainte ca fork(2) să returneze.

Unul sau mai mulți dintre cei trei gestionari prepare, parent și child pot fi indicați ca NULL, ceea ce înseamnă că nu este necesar să se apeleze niciun gestionar în punctul corespunzător.

pthread_atfork poate fi apelat de mai multe ori pentru a instala mai multe seturi de gestionari. În momentul fork(2), gestionarii prepare sunt apelați în ordine LIFO (ultimul adăugat cu pthread_atfork, primul apelat înainte de fork), în timp ce gestionarii parent și child sunt apelați în ordine FIFO (primul adăugat, primul apelat).

Pentru a înțelege scopul lui pthread_atfork, reamintim că fork(2) dublează întregul spațiu de memorie, inclusiv mutex-urile în starea lor de blocare curentă, dar numai firul apelant: alte fire nu rulează în procesul copil. Mutex-urile nu sunt utilizabile după fork și trebuie să fie inițializate cu pthread_mutex_init în procesul copil. Aceasta este o limitare a implementării actuale și ar putea sau nu să fie prezentă în versiunile viitoare.

VALOAREA RETURNATĂ

pthread_atfork returnează 0 în caz de succes și un cod de eroare diferit de zero în caz de eroare.

ERORI-IEȘIRE

memorie disponibilă insuficientă pentru a înregistra gestionarii.

AUTOR

Xavier Leroy <Xavier.Leroy@inria.fr>

CONSULTAȚI ȘI

fork(2), pthread_mutex_lock(3), pthread_mutex_unlock(3).

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.

LinuxThreads