pthread_atfork(3)

الاسم
pthread_atfork - تسجيل معالجات fork

المكتبة
مكتبة مسالك POSIX (libpthread، -lpthread)

موجز
#include <pthread.h>

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

الوصف
تسجل الدالة pthread_atfork() معالجات fork التي سيتم تنفيذها عند استدعاء fork(2) بواسطة أي خيط في عملية. تُنفذ المعالجات في سياق الخيط الذي يستدعي fork(2).

يمكن تسجيل ثلاثة أنواع من المعالجات:

•   يحدد prepare معالجًا يُنفذ في العملية الأم قبل بدء معالجة fork(2).

•   يحدد parent معالجًا يُنفذ في العملية الأم بعد اكتمال معالجة fork(2).

•   يحدد child معالجًا يُنفذ في العملية الابنة بعد اكتمال معالجة fork(2).

يمكن أن تكون أي من الوسائط الثلاث NULL إذا لم يكن هناك حاجة لمعالج في المرحلة المقابلة من معالجة fork(2).

قيمة الإرجاع
عند النجاح، تُرجع pthread_atfork() صفرًا. عند الخطأ، تُرجع رقم خطأ. يمكن استدعاء pthread_atfork() عدة مرات بواسطة عملية لتسجيل معالجات إضافية. تُستدعى المعالجات لكل مرحلة بترتيب محدد: تُستدعى معالجات prepare بترتيب عكسي للتسجيل؛ تُستدعى معالجات parent و child بترتيب التسجيل.

الأخطاء

ENOMEM
    تعذر تخصيص ذاكرة لتسجيل إدخال قائمة معالج fork.

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001.

ملاحظات
عند استدعاء fork(2) في عملية متعددة الخيوط، يُنسخ فقط الخيط المستدعي في العملية الابنة. كان الهدف الأصلي من pthread_atfork() هو السماح بإعادة العملية الابنة إلى حالة متسقة. على سبيل المثال، في وقت استدعاء fork(2)، قد تكون خيوط أخرى قد أغلقت كائنات المزامنة (mutexes) المرئية في ذاكرة مساحة المستخدم المنسوخة في الابنة. لن تُفتح هذه المزامنة أبدًا، لأن الخيوط التي وضعت الأقفال لا تُنسخ في الابنة. كان القصد من pthread_atfork() توفير آلية يمكن للتطبيق (أو المكتبة) من خلالها ضمان استعادة كائنات المزامنة وحالة العملية والخيوط الأخرى إلى حالة متسقة. عمليًا، هذه المهمة صعبة جدًا بشكل عام لتكون قابلة للتطبيق.

بعد عودة fork(2) في عملية متعددة الخيوط في الابنة، يجب على الابنة استدعاء دوال آمنة للإشارات غير المتزامنة فقط (انظر signal-safety(7)) حتى تستدعي execve(2) لتنفيذ برنامج جديد.

يحدد POSIX.1 أن pthread_atfork() يجب ألا تفشل مع الخطأ EINTR.

انظر أيضًا
fork(2), atexit(3), pthreads(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.