.\" -*- coding: UTF-8 -*- .\" Copyright 2013, Michael Kerrisk .\" Copyright 2012, Eric W. Biederman .\" 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 pid_namespaces 7 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم pid_namespaces \- نظرة عامة على مساحات أسماء PID في لينكس .SH الوصف للحصول على نظرة عامة على مساحات الأسماء، انظر \fBnamespaces\fP(7). .P تعزل مساحات أسماء PID فضاء أرقام معرفات العمليات، مما يعني أن العمليات في مساحات أسماء PID مختلفة يمكن أن تمتلك نفس PID. تسمح مساحات أسماء PID للحاويات بتوفير وظائف مثل تعليق/استئناف مجموعة العمليات في الحاوية وترحيل الحاوية إلى مضيف جديد مع احتفاظ العمليات داخل الحاوية بنفس معرفات PID. .P تبدأ معرفات PID في مساحة أسماء PID جديدة من 1، بشكل يشبه النظام المستقل، وتنتج استدعاءات \fBfork\fP(2) أو \fBvfork\fP(2) أو \fBclone\fP(2) عمليات ذات معرفات PID فريدة داخل مساحة الاسم. .P .\" .\" ============================================================ .\" يتطلب استخدام مساحات أسماء PID نواة مكونة مع الخيار \fBCONFIG_PID_NS\fP. .SS "عملية init لمساحة الاسم" تمتلك أول عملية منشأة في مساحة اسم جديدة (أي العملية المنشأة باستخدام \fBclone\fP(2) مع العلم \fBCLONE_NEWPID\fP، أو أول طفل منشأ بواسطة عملية بعد استدعاء \fBunshare\fP(2) باستخدام العلم \fBCLONE_NEWPID\fP) PID 1، وهي عملية "init" لمساحة الاسم (انظر \fBinit\fP(1)). تصبح هذه العملية الوالد لأي عمليات طفل يتيمة بسبب إنهاء عملية تقع في مساحة اسم PID هذه (انظر أدناه لمزيد من التفاصيل). .P إذا أنهيت عملية "init" لمساحة اسم PID، تنهي النواة جميع العمليات في مساحة الاسم عبر إشارة \fBSIGKILL\fP. يعكس هذا السلوك حقيقة أن عملية "init" أساسية للتشغيل الصحيح لمساحة اسم PID. في هذه الحالة، يفشل استدعاء \fBfork\fP(2) لاحق إلى مساحة اسم PID هذه مع الخطأ \fBENOMEM\fP؛ لا يمكن إنشاء عملية جديدة في مساحة اسم PID التي أنهيت عملية "init" الخاصة بها. يمكن أن تحدث مثل هذه السيناريوهات عندما، على سبيل المثال، تستخدم عملية واصف ملف مفتوح لملف \fI/proc/\fPpid\fI/ns/pid\fP مطابق لعملية كانت في مساحة اسم لـ \fBsetns\fP(2) إلى تلك المساحة بعد إنهاء عملية "init". يمكن أن يحدث سيناريو آخر محتمل بعد استدعاء \fBunshare\fP(2): إذا أنهي أول طفل منشأ لاحقًا بواسطة \fBfork\fP(2)، فإن استدعاءات \fBfork\fP(2) اللاحقة تفشل مع \fBENOMEM\fP. .P يمكن إرسال الإشارات التي أنشأت عملية "init" معالج إشارة لها فقط إلى عملية "init" بواسطة أعضاء آخرين في مساحة اسم PID. ينطبق هذا التقييد حتى على العمليات المميزة، ويمنع الأعضاء الآخرين في مساحة اسم PID من قتل عملية "init" عن طريق الخطأ. .P وبالمثل، يمكن لعملية في مساحة اسم سلف\[em]مع مراعاة فحوصات الإذن المعتادة الموصوفة في \fBkill\fP(2)\[em]إرسال إشارات إلى عملية "init" لمساحة اسم PID فرعية فقط إذا أنشأت عملية "init" معالجًا لتلك الإشارة. (داخل المعالج، سيكون حقل \fIsiginfo_t\fP \fIsi_pid\fP الموصوف في \fBsigaction\fP(2) صفرًا.) تُعامل \fBSIGKILL\fP أو \fBSIGSTOP\fP بشكل استثنائي: تُسلم هذه الإشارات قسرًا عند إرسالها من مساحة اسم PID سلف. لا يمكن لعملية "init" التقاط أي من هاتين الإشارتين، وبالتالي ستؤدي إلى الإجراءات المعتادة المرتبطة بتلك الإشارات (إنهاء العملية وإيقافها على التوالي). .P .\" .\" ============================================================ .\" بدءًا من لينكس 3.4، يتسبب استدعاء النظام \fBreboot\fP(2) في إرسال إشارة إلى عملية "init" لمساحة الاسم. انظر \fBreboot\fP(2) لمزيد من التفاصيل. .SS "تداخل مساحات أسماء PID" .\" commit f2302505775fd13ba93f034206f1e2a587017929 .\" The kernel constant MAX_PID_NS_LEVEL يمكن تداخل مساحات أسماء PID: لكل مساحة اسم PID والد، باستثناء مساحة اسم PID الأولية ("الجذر"). والد مساحة اسم PID هو مساحة اسم PID للعملية التي أنشأت مساحة الاسم باستخدام \fBclone\fP(2) أو \fBunshare\fP(2). تشكل مساحات أسماء PID بذلك شجرة، مع تتبع جميع مساحات الاسم نسبها في النهاية إلى مساحة الاسم الجذر. منذ لينكس 3.7، تحد النواة أقصى عمق تداخل لمساحات أسماء PID إلى 32. .P تكون العملية مرئية للعمليات الأخرى في مساحة اسم PID الخاصة بها، وللعمليات في كل مساحة اسم PID سلف مباشر عائدًا إلى مساحة اسم PID الجذر. في هذا السياق، يعني "مرئي" أن عملية يمكن أن تكون هدفًا لعمليات من قبل عملية أخرى باستخدام استدعاءات نظام تحدد معرف عملية. على العكس، لا يمكن للعمليات في مساحة اسم PID فرعية رؤية العمليات في مساحة الاسم الوالد ومساحات الاسم السلف البعيدة. بشكل أكثر إيجازًا: يمكن لعملية رؤية (مثل إرسال إشارات باستخدام \fBkill\fP(2)، تعيين قيم nice باستخدام \fBsetpriority\fP(2)، إلخ) فقط العمليات الموجودة في مساحة اسم PID الخاصة بها وفي سلالات تلك المساحة. .P تمتلك العملية معرف عملية واحد في كل طبقة من طبقات تسلسل مساحة اسم PID التي تكون مرئية فيها، والعودة عبر كل مساحة اسم سلف مباشر حتى مساحة اسم PID الجذر. تعمل استدعاءات النظام التي تعمل على معرفات العملية دائمًا باستخدام معرف العملية المرئي في مساحة اسم PID للمتصل. يعيد استدعاء \fBgetpid\fP(2) دائمًا PID المرتبط بمساحة الاسم التي أنشئت فيها العملية. .P قد يكون لبعض العمليات في مساحة اسم PID آباء خارج مساحة الاسم. على سبيل المثال، والد العملية الأولية في مساحة الاسم (أي عملية \fBinit\fP(1) مع PID 1) هو بالضرورة في مساحة اسم أخرى. وبالمثل، فإن الأطفال المباشرين لعملية تستخدم \fBsetns\fP(2) لجعل أطفالها ينضمون إلى مساحة اسم PID هم في مساحة اسم PID مختلفة عن متصل \fBsetns\fP(2). تعيد استدعاءات \fBgetppid\fP(2) لمثل هذه العمليات 0. .P بينما قد تنزل العمليات بحرية إلى مساحات اسم PID فرعية (مثل استخدام \fBsetns\fP(2) مع واصف ملف مساحة اسم PID)، لا يمكنها التحرك في الاتجاه الآخر. أي أن العمليات لا يمكنها دخول أي مساحات اسم سلف (والد، جد، إلخ). تغيير مساحات أسماء PID هو عملية باتجاه واحد. .P .\" .\" ============================================================ .\" يمكن استخدام عملية \fBNS_GET_PARENT\fP \fBioctl\fP(2) لاكتشاف العلاقة الوالدية بين مساحات أسماء PID؛ انظر \fBioctl_nsfs\fP(2). .SS "دلالات setns(2) و unshare(2)" تتسبب استدعاءات \fBsetns\fP(2) التي تحدد واصف ملف مساحة اسم PID واستدعاءات \fBunshare\fP(2) مع العلم \fBCLONE_NEWPID\fP في وضع الأطفال المنشأين لاحقًا بواسطة المتصل في مساحة اسم PID مختلفة عن المتصل. (منذ لينكس 4.12، تُعرض مساحة اسم PID تلك عبر ملف \fI/proc/\fPpid\fI/ns/pid_for_children\fP، كما هو موصوف في \fBnamespaces\fP(7).) لا تغير هذه الاستدعاءات، مع ذلك، مساحة اسم PID لعملية المتصل، لأن القيام بذلك سيغير فكرة المتصل عن PID الخاص به (كما أبلغ عنها \fBgetpid\fP())، مما سيكسر العديد من التطبيقات والمكتبات. .P لوضع الأمور بطريقة أخرى: تُحدد عضوية مساحة اسم PID للعملية عند إنشاء العملية ولا يمكن تغييرها بعد ذلك. من بين أمور أخرى، يعني هذا أن العلاقة الوالدية بين العمليات تعكس العلاقة الوالدية بين مساحات أسماء PID: والد العملية إما في نفس مساحة الاسم أو يقيم في مساحة اسم PID الوالد المباشر. .P .\" .\" ============================================================ .\" يمكن لعملية استدعاء \fBunshare\fP(2) مع العلم \fBCLONE_NEWPID\fP مرة واحدة فقط. بعد أن تنفذ هذه العملية، سيكون رابطها الرمزي \fI/proc/\fPpid\fI/ns/pid_for_children\fP فارغًا حتى يُنشأ الطفل الأول في مساحة الاسم. .SS "تبني الأطفال اليتامى" .\" Furthermore, by definition, the parent of the "init" process .\" of a PID namespace resides in the parent PID namespace. .\" .\" ============================================================ .\" عندما يصبح أحد العمليات الفرعية معزولًا، يُعاد ربطه بالعملية "init" في نطاق أسماء PID الخاص بالعملية الأصلية (إلا إذا استخدم أحد أسلاف العملية الأصلية الأقرب الأمر \fBprctl\fP(2) \fBPR_SET_CHILD_SUBREAPER\fP لتمييز نفسه كحاصد للعمليات الفرعية المعزولة).لاحظ أنه نظرًا لدلالات \fBsetns\fP(2) و\fBunshare\fP(2) المذكورة أعلاه، فقد تكون هذه العملية "init" في نطاق أسماء PID الذي يمثل \fIparent\fP لنطاق أسماء PID الخاص بالعملية الفرعية، وليس العملية "init" في نطاق أسماء PID الخاص بالعملية الفرعية نفسها. .SS "توافق CLONE_NEWPID مع علامات CLONE_* الأخرى" في الإصدارات الحالية من لينكس، لا يمكن الجمع بين \fBCLONE_NEWPID\fP و\fBCLONE_THREAD\fP. يجب أن تكون الخيوط في نفس مساحة أسماء PID بحيث تتمكن الخيوط الموجودة في عملية ما من إرسال إشارات لبعضها البعض. وبالمثل، يجب أن يكون من الممكن رؤية جميع خيوط العملية في نظام الملفات \fBproc\fP(5) . بالإضافة إلى ذلك، إذا كان خيطان في مساحات أسماء PID مختلفة، فلن يكون من الممكن ترميز معرف العملية التي ترسل الإشارة بشكل ذي معنى عند إرسال الإشارة (انظر وصف النوع \fIsiginfo_t\fP في \fBsigaction\fP(2)). نظرًا لأن هذا يُحسب عند إدراج الإشارة في قائمة الانتظار، فإن قائمة انتظار الإشارات المشتركة بين العمليات في مساحات أسماء PID متعددة ستحبط ذلك. .P .\" Note these restrictions were all introduced in .\" 8382fcac1b813ad0a4e68a838fc7ae93fa39eda0 .\" when CLONE_NEWPID|CLONE_VM was disallowed .\" (restriction lifted in faf00da544045fdc1454f3b9e6d7f65c841de302) .\" (restriction lifted in e79f525e99b04390ca4d2366309545a836c03bf1) .\" .\" ============================================================ .\" في الإصدارات السابقة من لينكس، كان \fBCLONE_NEWPID\fP ممنوعًا أيضًا (يفشل مع الخطأ \fBEINVAL\fP) بالاقتران مع \fBCLONE_SIGHAND\fP (قبل لينكس 4.3) وكذلك \fBCLONE_VM\fP (قبل لينكس 3.12). التغييرات التي رفعت هذه القيود نُقلت أيضًا إلى النوى المستقرة السابقة. .SS "/proc ومساحات أسماء PID" نظام الملفات \fI/proc\fP يُظهر (في الدلائل \fI/proc/\fPpid) فقط العمليات المرئية في مساحة اسم PID للعملية التي نفذت الوصل، حتى لو نُظر إلى نظام الملفات \fI/proc\fP من عمليات في مساحات أسماء أخرى. .P بعد إنشاء مساحة اسم PID جديدة، من المفيد للطفل تغيير دليله الجذر ووصل مثيل procfs جديد في \fI/proc\fP حتى تعمل أدوات مثل \fBps\fP(1) بشكل صحيح. إذا أُنشئت مساحة اسم وصل جديدة في وقت واحد بتضمين \fBCLONE_NEWNS\fP في وسيط \fIflags\fP لـ \fBclone\fP(2) أو \fBunshare\fP(2)، فليس من الضروري تغيير الدليل الجذر: يمكن وصل مثيل procfs جديد مباشرة فوق \fI/proc\fP. .P من شل، الأمر لوصل \fI/proc\fP هو: .P .in +4n .EX $ mount \-t proc proc /proc .EE .in .P .\" .\" ============================================================ .\" استدعاء \fBreadlink\fP(2) على المسار \fI/proc/self\fP يُنتج معرف العملية للمتصل في مساحة اسم PID لوصل procfs (أي مساحة اسم PID للعملية التي وصلت procfs). يمكن أن يكون هذا مفيدًا لأغراض الاستبطان، عندما تريد عملية اكتشاف PID الخاص بها في مساحات أسماء أخرى. .SS "ملفات /proc" .TP \fB/proc/sys/kernel/ns_last_pid\fP (منذ لينكس 3.3) .\" commit b8f566b04d3cddd192cfd2418ae6d54ac6353792 هذا الملف (الذي يُظاهَر لكل مساحة اسم PID) يُظهر آخر PID خُصص في مساحة اسم PID هذه. عندما يُخصص PID التالي، سيبحث النواة عن أدنى PID غير مخصص أكبر من هذه القيمة، وعند قراءة هذا الملف لاحقًا سيُظهر ذلك PID. .IP .\" This ability is necessary to support checkpoint restore in user-space .\" .\" ============================================================ .\" هذا الملف قابل للكتابة بواسطة عملية تمتلك إمكانية \fBCAP_SYS_ADMIN\fP أو (منذ لينكس 5.9) \fBCAP_CHECKPOINT_RESTORE\fP داخل مساحة اسم المستخدم التي تملك مساحة اسم PID. هذا يجعل من الممكن تحديد PID الذي سيُخصص للعملية التالية التي تُنشأ داخل مساحة اسم PID هذه. .SS متفرقات عند تمرير معرف عملية عبر مقبس نطاق يونكس إلى عملية في مساحة اسم PID مختلفة (انظر وصف \fBSCM_CREDENTIALS\fP في \fBunix\fP(7))، يُترجم إلى قيمة PID المقابلة في مساحة اسم PID للعملية المستقبلة. .SH المعايير لينكس. .SH أمثلة راجع \fBuser_namespaces\fP(7). .SH "انظر أيضًا" \fBclone\fP(2), \fBreboot\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcapabilities\fP(7), \fBcredentials\fP(7), \fBmount_namespaces\fP(7), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7), \fBswitch_root\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .