getpid(2)

الاسم
getpid، getppid - جلب معرّف العملية

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <unistd.h>

pid_t getpid(void);
pid_t getppid(void);

الوصف
تُعيد getpid() معرف العملية (PID) للعملية المستدعِية. (يُستخدم هذا غالبًا بواسطة الروتينات التي تولد أسماء ملفات مؤقتة فريدة.)

تُعيد getppid() معرف العملية للأب للعملية المستدعِية. سيكون هذا إما معرف العملية التي أنشأت هذه العملية باستخدام fork()، أو، إذا كانت تلك العملية قد انتهت بالفعل، معرف العملية التي أُعيدت تبعية هذه العملية إليها (إما init(1) أو عملية "subreaper" عُرّفت عبر عملية PR_SET_CHILD_SUBREAPER في prctl(2)).

الأخطاء
تنجح هذه الدوال دائمًا.

الإصدارات
في Alpha، وبدلاً من زوج من استدعاءات النظام getpid() و getppid()، يُوفّر استدعاء نظام واحد getxpid()، والذي يُعيد زوجًا من معرّف العملية PID ومعرّف عملية الأب. تتعامل دوال الغلاف getpid() و getppid() في glibc مع هذا بشفافية. انظر syscall(2) لمزيد من التفاصيل المتعلقة بربط السجلات.

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

التاريخ
4.3BSD، SVr4، POSIX.1-1988.

  الاختلافات بين مكتبة C والنواة
من الإصدار 2.3.4 من glibc وحتى الإصدار 2.24 (بما في ذلك)، خَبّأت دالة الغلاف في glibc لـ getpid() معرّفات العمليات PIDs، بهدف تجنب استدعاءات النظام الإضافية عندما تستدعي العملية getpid() بشكل متكرر. عادة ما كانت هذه الخبيئة غير مرئية، ولكن تشغيلها الصحيح اعتمد على الدعم في دوال الغلاف لـ fork(2) و vfork(2) و clone(2): إذا تجاوز التطبيق أغلفة glibc لاستدعاءات النظام هذه باستخدام syscall(2)، فإن استدعاء getpid() في الابن سيُعيد قيمة خاطئة (لنكون دقيقين: سيُعيد PID الخاص بالعملية الأب). بالإضافة إلى ذلك، كانت هناك حالات يمكن أن تُعيد فيها getpid() قيمة خاطئة حتى عند استدعاء clone(2) عبر دالة غلاف glibc. (لمناقشة إحدى هذه الحالات، انظر BUGS في clone(2).) علاوة على ذلك، كان تعقيد كود الخبيئة مصدرًا لبعض الأخطاء البرمجية داخل glibc على مر السنين.

بسبب المشاكل المذكورة أعلاه، أُزيلت خبيئة PID منذ الإصدار 2.25 من glibc: تستدعي استدعاءات getpid() دائمًا استدعاء النظام الفعلي، بدلاً من إعادة قيمة مخبأة.

ملاحظات
إذا كان أب المستدعِي في مساحة أسماء PID مختلفة (انظر pid_namespaces(7))، تُعيد getppid() القيمة 0.

من منظور النواة، يُعرف PID (المشترك بين جميع الخيوط في عملية متعددة الخيوط) أحيانًا أيضًا باسم معرف مجموعة الخيوط (TGID). وهذا يتناقض مع معرف خيط النواة (TID)، وهو فريد لكل خيط. لمزيد من التفاصيل، راجع gettid(2) ومناقشة علم CLONE_THREAD في clone(2).

انظر أيضًا
clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3), credentials(7), pid_namespaces(7)

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

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

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