.\" -*- coding: UTF-8 -*- .\" Copyright 2019, 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 pidfd_send_signal 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم pidfd_send_signal \- إرسال إشارة إلى عملية محددة بواصف ملف .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* Definition of \fBSIG*\fP constants */ \fB#include \fP /* Definition of \fBSI_*\fP constants */ \fB#include \fP /* Definition of \fBSYS_*\fP constants */ \fB#include \fP .P \fBint syscall(SYS_pidfd_send_signal, int \fP\fIpidfd\fP\fB, int \fP\fIsig\fP\fB,\fP \fB siginfo_t *_Nullable \fP\fIinfo\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .P \fIملاحظة\fP: لا توفر glibc غلافًا لـ \fBpidfd_send_signal\fP()، مما يستلزم استخدام \fBsyscall\fP(2). .SH الوصف .\" See the very detailed commit message for kernel commit .\" 3eb39f47934f9d5a3027fe00d906a45fe3a15fad ترسل استدعاء النظام \fBpidfd_send_signal\fP() الإشارة \fIsig\fP إلى العملية الهدف المشار إليها بـ \fIpidfd\fP، وهو واصف ملف PID يشير إلى عملية. .P إذا أشارت وسيطة \fIinfo\fP إلى مخزن \fIsiginfo_t\fP، فيجب ملء ذلك المخزن كما هو موصوف في \fBrt_sigqueueinfo\fP(2). .P إذا كانت وسيطة \fIinfo\fP مؤشرًا فارغًا، فهذا يعادل تحديد مؤشر إلى مخزن \fIsiginfo_t\fP تتطابق حقوله مع القيم المقدمة ضمنيًا عند إرسال إشارة باستخدام \fBkill\fP(2): .P .PD 0 .IP \[bu] 3 يُضبط \fIsi_signo\fP على رقم الإشارة؛ .IP \[bu] يُضبط \fIsi_errno\fP على 0؛ .IP \[bu] يُضبط \fIsi_code\fP على \fBSI_USER\fP؛ .IP \[bu] يُضبط \fIsi_pid\fP على PID للمتصل؛ و .IP \[bu] يُضبط \fIsi_uid\fP على معرف المستخدم الحقيقي للمتصل. .PD .P يجب أن تكون العملية المتصلة إما في نفس نطاق PID مثل العملية المشار إليها بـ \fIpidfd\fP، أو في سلف لذلك النطاق. .P تسمح وسيطة \fIflags\fP بتعديل نطاق الإشارة. مبدئيًا، يُستنتج نطاق الإشارة من وسيطة \fIpidfd\fP. على سبيل المثال، إذا كان \fIpidfd\fP يشير إلى خيط محدد \[em]أي، أُنشئ \fIpidfd\fP عبر \fBpidfd_open\fP(2) باستخدام العلم \fBPIDFD_THREAD\fP أو عبر \fBclone3\fP(2) باستخدام العلم \fBCLONE_PIDFD\fP مع العلم \fBCLONE_THREAD\fP\[em] فإن تمرير \fIpidfd\fP إلى \fBpidfd_send_signal\fP(2) وترك وسيطة \fIflags\fP كـ \fB0\fP سيؤدي إلى إرسال الإشارة إلى الخيط المحدد المشار إليه بـ \fIpidfd\fP. .TP \fBPIDFD_SIGNAL_THREAD\fP (منذ Linux 6.9) .\" commit e1fb1dc08e73466830612bcf2f9f72180965c9ba يضمن إرسال الإشارة إلى الخيط المحدد المشار إليه بـ \fIpidfd\fP. .TP \fBPIDFD_SIGNAL_THREAD_GROUP\fP (منذ Linux 6.9) .\" commit e1fb1dc08e73466830612bcf2f9f72180965c9ba إذا كان \fIpidfd\fP يشير إلى قائد مجموعة خيوط، يضمن إرسال الإشارة إلى مجموعة الخيوط، حتى لو أُنشئ \fIpidfd\fP للإشارة إلى خيط محدد. .TP \fBPIDFD_SIGNAL_PROCESS_GROUP\fP (منذ Linux 6.9) .\" commit e1fb1dc08e73466830612bcf2f9f72180965c9ba إذا كان \fIpidfd\fP يشير إلى قائد مجموعة عمليات، يضمن إرسال الإشارة إلى مجموعة العمليات، حتى لو أُنشئ \fIpidfd\fP للإشارة إلى خيط محدد أو إلى قائد مجموعة خيوط. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fBpidfd_send_signal\fP() 0. عند الخطأ، تُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEBADF\fP \fIpidfd\fP ليس واصف ملف PID صالحاً. .TP \fBEINVAL\fP \fIsig\fP ليست إشارة صالحة. .TP \fBEINVAL\fP العملية المتصلة ليست في نطاق PID يمكنها منه إرسال إشارة إلى العملية الهدف. .TP \fBEINVAL\fP \fIflags\fP غير صالح. .TP \fBEPERM\fP لا تملك العملية المتصلة الإذن لإرسال الإشارة إلى العملية الهدف. .TP \fBEPERM\fP لا يشير \fIpidfd\fP إلى العملية المتصلة، و \fIinfo.si_code\fP غير صالح (انظر \fBrt_sigqueueinfo\fP(2)). .TP \fBESRCH\fP العملية الهدف غير موجودة (أي أنها أُنهيت وانتُظر اكتمالها). .SH المعايير لينكس. .SH التاريخ Linux 5.1. .SH ملاحظات .SS "واصفات ملفات PID" وسيطة \fIpidfd\fP هي واصف ملف PID، واصف ملف يشير إلى عملية. يمكن الحصول على مثل هذا الواصف بأي من الطرق التالية: .IP \[bu] 3 بفتح دليل \fI/proc/\fPpid؛ .IP \[bu] باستخدام \fBpidfd_open\fP(2); أو .IP \[bu] عبر واصف ملف PID الذي يُرجعه استدعاء \fBclone\fP(2) أو \fBclone3\fP(2) يُحدد العَلَم \fBCLONE_PIDFD\fP. .P يسمح استدعاء النظام \fBpidfd_send_signal\fP() بتجنب حالات السباق التي تحدث عند استخدام الواجهات التقليدية (مثل \fBkill\fP(2)) لإرسال إشارة إلى عملية. المشكلة هي أن الواجهات التقليدية تُحدد العملية الهدف عبر معرف العملية (PID)، مما قد يؤدي إلى إرسال المُرسِل إشارة إلى العملية الخاطئة عن طريق الخطأ إذا كانت العملية المستهدفة أصلاً قد انتهت وأُعيد استخدام PID الخاص بها لعملية أخرى. على النقيض، واصف ملف PID هو مرجع مستقر لعملية محددة؛ إذا انتهت تلك العملية، يفشل \fBpidfd_send_signal\fP() مع الخطأ \fBESRCH\fP. .SH أمثلة .\" SRC BEGIN (pidfd_send_signal.c) .EX #define _GNU_SOURCE #include #include #include #include #include #include #include #include \& static int pidfd_send_signal(int pidfd, int sig, siginfo_t *info, unsigned int flags) { return syscall(SYS_pidfd_send_signal, pidfd, sig, info, flags); } \& int main(int argc, char *argv[]) { int pidfd, sig; char path[PATH_MAX]; siginfo_t info; \& if (argc != 3) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& sig = atoi(argv[2]); \& /* Obtain a PID file descriptor by opening the /proc/PID directory of the target process. */ \& snprintf(path, sizeof(path), "/proc/%s", argv[1]); \& pidfd = open(path, O_RDONLY); if (pidfd == \-1) { perror("open"); exit(EXIT_FAILURE); } \& /* Populate a \[aq]siginfo_t\[aq] structure for use with pidfd_send_signal(). */ \& memset(&info, 0, sizeof(info)); info.si_code = SI_QUEUE; info.si_signo = sig; info.si_errno = 0; info.si_uid = getuid(); info.si_pid = getpid(); info.si_value.sival_int = 1234; \& /* Send the signal. */ \& if (pidfd_send_signal(pidfd, sig, &info, 0) == \-1) { perror("pidfd_send_signal"); exit(EXIT_FAILURE); } \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBclone\fP(2), \fBkill\fP(2), \fBpidfd_open\fP(2), \fBrt_sigqueueinfo\fP(2), \fBsigaction\fP(2), \fBpid_namespaces\fP(7), \fBsignal\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 .