.\" -*- coding: UTF-8 -*- .\" Copyright 2006, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH فرع 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم fork \- إنشاء عملية تابعة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBpid_t fork(void);\fP .fi .SH الوصف تنشئ \fBfork\fP() عملية جديدة بنسخ العملية المستدعية. يُشار إلى العملية الجديدة باسم العملية \fIالتابعة\fP. يُشار إلى العملية المستدعية باسم العملية \fIالأم\fP. .P تعمل العملية التابعة والعملية الأم في مساحات ذاكرة منفصلة. في وقت \fBfork\fP() تحتوي كلتا مساحتي الذاكرة على نفس المحتوى. لا تؤثر عمليات كتابة الذاكرة، وخرائط الملفات (\fBmmap\fP(2))، وإلغاء الخرائط (\fBmunmap\fP(2)) التي تنفذها إحدى العمليتين على الأخرى. .P العملية التابعة هي نسخة طبق الأصل من العملية الأم باستثناء النقاط التالية: .IP \[bu] 3 للعُملية التابعة معرف عملية فريد خاص بها، ولا يتطابق معرف العملية هذا مع معرف أي مجموعة عمليات (\fBsetpgid\fP(2)) أو جلسة موجودة. .IP \[bu] معرف العملية الأم للتابع هو نفس معرف العملية الأم. .IP \[bu] لا ترث العملية التابعة أقفال الذاكرة الخاصة بعمليتها الأم (\fBmlock\fP(2), \fBmlockall\fP(2)). .IP \[bu] يتم إعادة تعيين استخدامات موارد العملية (\fBgetrusage\fP(2)) وعدادات وقت وحدة المعالجة المركزية (\fBtimes\fP(2)) إلى الصفر في التابعة. .IP \[bu] مجموعة الإشارات المعلقة للعملية التابعة فارغة في البداية (\fBsigpending\fP(2)). .IP \[bu] لا ترث العملية التابعة تعديلات الإشارات من عمليتها الأم (\fBsemop\fP(2)). .IP \[bu] لا ترث العملية التابعة أقفال السجلات المرتبطة بالعملية من عمليتها الأم (\fBfcntl\fP(2)). (من ناحية أخرى، ترث أقفال وصف الملف المفتوح \fBfcntl\fP(2) وأقفال \fBflock\fP(2) من عمليتها الأم.) .IP \[bu] لا ترث العملية التابعة المؤقتات من عمليتها الأم (\fBsetitimer\fP(2), \fBalarm\fP(2), \fBtimer_create\fP(2)). .IP \[bu] لا ترث العملية التابعة عمليات الإدخال/الإخراج غير المتزامنة المعلقة من عمليتها الأم (\fBaio_read\fP(3), \fBaio_write\fP(3))، ولا ترث أي سياقات إدخال/إخراج غير متزامنة من عمليتها الأم (انظر \fBio_setup\fP(2)). .P جميع سمات العملية في القائمة السابقة محددة في POSIX.1. تختلف العملية الأم والتابعة أيضًا فيما يتعلق بسمات العملية الخاصة بلينكس التالية: .IP \[bu] 3 لا ترث العملية التابعة إشعارات تغيير الدليل (dnotify) من عمليتها الأم (انظر وصف \fBF_NOTIFY\fP في \fBfcntl\fP(2)). .IP \[bu] يتم إعادة تعيين إعداد \fBprctl\fP(2) \fBPR_SET_PDEATHSIG\fP بحيث لا تتلقى العملية التابعة إشارة عند إنهاء عمليتها الأم. .IP \[bu] يتم تعيين قيمة ارتخاء المؤقت المبدئية إلى قيمة ارتخاء المؤقت الحالية للعملية الأم. انظر وصف \fBPR_SET_TIMERSLACK\fP في \fBprctl\fP(2). .IP \[bu] لا يتم توريث تعيينات الذاكرة التي تم وضع علامة عليها بعلم \fBmadvise\fP(2) \fBMADV_DONTFORK\fP عبر \fBfork\fP(). .IP \[bu] يتم تصفير الذاكرة في نطاقات العناوين التي تم وضع علامة عليها بعلم \fBmadvise\fP(2) \fBMADV_WIPEONFORK\fP في التابعة بعد \fBfork\fP(). (يبقى إعداد \fBMADV_WIPEONFORK\fP في مكانه لنطاقات العناوين تلك في التابعة.) .IP \[bu] إشارة إنهاء العملية التابعة هي دائمًا \fBSIGCHLD\fP (انظر \fBclone\fP(2)). .IP \[bu] لا ترث العملية التابعة بتات إذن الوصول إلى المنفذ التي تم تعيينها بواسطة \fBioperm\fP(2)؛ يجب على التابعة تشغيل أي بتات تحتاجها باستخدام \fBioperm\fP(2). .P لاحظ النقاط الإضافية التالية: .IP \[bu] 3 يتم إنشاء العملية التابعة بخيط واحد\[em]الخيط الذي استدعى \fBfork\fP(). يتم نسخ مساحة العنوان الافتراضية الكاملة للأم في التابعة، بما في ذلك حالات كائنات المزامنة ومتغيرات الشرط وكائنات pthreads الأخرى؛ قد يكون استخدام \fBpthread_atfork\fP(3) مفيدًا للتعامل مع المشكلات التي قد يسببها هذا. .IP \[bu] بعد \fBfork\fP() في برنامج متعدد الخيوط، يمكن للعملية التابعة استدعاء الدوال الآمنة للإشارات غير المتزامنة فقط بأمان (انظر \fBsignal\-safety\fP(7)) إلى أن تستدعي \fBexecve\fP(2). .IP \[bu] ترث العملية التابعة نسخًا من مجموعة واصفات الملفات المفتوحة للأم. يشير كل واصف ملف في التابعة إلى نفس وصف الملف المفتوح (انظر \fBopen\fP(2)) مثل واصف الملف المقابل في الأم. يعني هذا أن واصفي الملف يشتركان في أعلام حالة الملف المفتوح، وإزاحة الملف، وسمات الإدخال/الإخراج المدفوعة بالإشارة (انظر وصف \fBF_SETOWN\fP و \fBF_SETSIG\fP في \fBfcntl\fP(2)). .IP \[bu] ترث العملية التابعة نسخًا من مجموعة واصفات قوائم انتظار الرسائل المفتوحة للأم (انظر \fBmq_overview\fP(7)). يشير كل واصف ملف في التابعة إلى نفس وصف قائمة انتظار الرسائل المفتوحة مثل واصف الملف المقابل في الأم. يعني هذا أن واصفي الملف يشتركان في نفس الأعلام (\fImq_flags\fP). .IP \[bu] ترث العملية التابعة نسخًا من مجموعة تيارات الدليل المفتوحة للأم (انظر \fBopendir\fP(3)). ينص POSIX.1 على أن تيارات الدليل المقابلة في الأم والتابعة \fIقد\fP تشترك في تحديد موضع تيار الدليل؛ على لينكس/glibc لا تفعل ذلك. .SH "قيمة الإرجاع" عند النجاح، يتم إرجاع معرف العملية (PID) للعملية التابعة في الأم، ويتم إرجاع 0 في التابعة. عند الفشل، يتم إرجاع \-1 في الأم، ولا يتم إنشاء عملية تابعة، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEAGAIN\fP .\" NOTE! The following should match the description in pthread_create(3) تمت مصادفة حد يفرضه النظام على عدد الخيوط. هناك عدد من الحدود التي قد تؤدي إلى هذا الخطأ: .RS .IP \[bu] 3 تم الوصول إلى حد الموارد الناعم \fBRLIMIT_NPROC\fP (المعيّن عبر \fBsetrlimit\fP(2))، والذي يحد من عدد العمليات والخيوط لمعرف مستخدم حقيقي؛ .IP \[bu] الحد النظامي للنواة على عدد العمليات والخيوط، \fI/proc/sys/kernel/threads\-max\fP، قد وُصِل إليه (انظر \fBproc\fP(5))؛ .IP \[bu] الحد الأقصى لعدد معرفات العمليات (PIDs)، \fI/proc/sys/kernel/pid_max\fP، قد وُصِل إليه (انظر \fBproc\fP(5))؛ أو .IP \[bu] حد PID (\fIpids.max\fP) الذي تفرضه وحدة تحكم cgroup "عدد العمليات" (PIDs) قد وُصِل إليه. .RE .TP \fBEAGAIN\fP المستدعي يعمل تحت سياسة الجدولة \fBSCHED_DEADLINE\fP وليس لديه علم إعادة التعيين عند fork مضبوطًا. انظر \fBsched\fP(7). .TP \fBENOMEM\fP فشلت \fBfork\fP() في تخصيص هياكل النواة الضرورية لأن الذاكرة ضيقة. .TP \fBENOMEM\fP جرت محاولة لإنشاء عملية طفل في نطاق PID الذي أنهت عمليته "init" عملها. انظر \fBpid_namespaces\fP(7). .TP \fBENOSYS\fP .\" e.g., arm (optionally), blackfin, c6x, frv, h8300, microblaze, xtensa \fBfork\fP() غير مدعومة على هذه المنصة (على سبيل المثال، عتاد بدون وحدة إدارة ذاكرة). .TP \fBERESTARTNOINTR\fP (منذ لينكس 2.6.17) .\" commit 4a2c7a7837da1b91468e50426066d988050e4d56 قُطِعَ استدعاء النظام بواسطة إشارة وسيُعاد تشغيله. (لا يمكن رؤية هذا إلا أثناء التتبع trace.) .SH الإصدارات .SS "الاختلافات بين مكتبة C والنواة" .\" nptl/sysdeps/unix/sysv/linux/fork.c .\" and does some magic to ensure that getpid(2) returns the right value. منذ glibc 2.3.3، بدلاً من استدعاء استدعاء النظام \fBfork\fP() للنواة، فإن غلاف glibc \fBfork\fP() المقدم كجزء من تنفيذ خيوط NPTL يستدعي \fBclone\fP(2) بأعلام توفر نفس تأثير استدعاء النظام التقليدي. (استدعاء \fBfork\fP() يعادل استدعاء \fBclone\fP(2) مع تحديد \fIflags\fP كـ \fBSIGCHLD\fP فقط.) يستدعي غلاف glibc أي معالجات fork التي أُنشئت باستخدام \fBpthread_atfork\fP(3). .SS "أمان الإشارة غير المتزامنة" \fB_Fork\fP(3) هي متغير آمن للإشارات غير المتزامنة من \fBfork\fP(2). .SH المعايير POSIX.1\-2024. .SH التاريخ 4.3BSD، SVr4، POSIX.1\-1988. .SH ملاحظات تحت لينكس، تُنفذ \fBfork\fP() باستخدام صفحات النسخ عند الكتابة، لذا فإن العقوبة الوحيدة التي تتكبدها هي الوقت والذاكرة اللازمان لنسخ جداول صفحات الأب، ولإنشاء هيكل مهمة فريد للطفل. .SH أمثلة انظر \fBpipe\fP(2) و \fBwait\fP(2) لمزيد من الأمثلة. .P .\" SRC BEGIN (fork.c) .EX #include #include #include #include #include #include \& int main(void) { pid_t pid; \& if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) { perror("signal"); exit(EXIT_FAILURE); } pid = fork(); switch (pid) { case \-1: perror("fork"); exit(EXIT_FAILURE); case 0: puts("Child exiting."); fflush(stdout); _exit(EXIT_SUCCESS); default: printf("Child is PID %jd\[rs]n", (intmax_t) pid); puts("Parent exiting."); exit(EXIT_SUCCESS); } } .EE .\" SRC END .SH "انظر أيضًا" \fBclone\fP(2), \fBexecve\fP(2), \fBexit\fP(2), \fB_exit\fP(2), \fBsetrlimit\fP(2), \fBunshare\fP(2), \fBvfork\fP(2), \fBwait\fP(2), \fBdaemon\fP(3), \fB_Fork\fP(3), \fBpthread_atfork\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .