.\" -*- coding: UTF-8 -*- .\" Copyright 1994-1995, Mike Battersby .\" Copyright 2004-2005, 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 sigaction 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم sigaction, rt_sigaction \- فحص وتغيير إجراء الإشارة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint sigaction(int \fP\fIsignum\fP\fB,\fP \fB const struct sigaction *_Nullable restrict \fP\fIact\fP\fB,\fP \fB struct sigaction *_Nullable restrict \fP\fIoldact\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBsigaction\fP(): .nf _POSIX_C_SOURCE .fi .P \fIsiginfo_t\fP: .nf _POSIX_C_SOURCE >= 199309L .fi .SH الوصف تُستخدم استدعاء النظام \fBsigaction\fP() لتغيير الإجراء الذي تتخذه العملية عند استلام إشارة محددة. (انظر \fBsignal\fP(7) للحصول على نظرة عامة على الإشارات.) .P يحدد \fIsignum\fP الإشارة ويمكن أن يكون أي إشارة صالحة باستثناء \fBSIGKILL\fP و \fBSIGSTOP\fP. .P إذا كان \fIact\fP ليس NULL، فسيُثبت الإجراء الجديد للإشارة \fIsignum\fP من \fIact\fP. إذا كان \fIoldact\fP ليس NULL، فسيُحفظ الإجراء السابق في \fIoldact\fP. .P تُعرف بنية \fIsigaction\fP بشيء يشبه ما يلي: .P .in +4n .EX struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; .EE .in .P في بعض البنيات، تدخل "union" في الأمر: لا تعين قيمًا لكل من \fIsa_handler\fP و \fIsa_sigaction\fP معًا. .P الحقل \fIsa_restorer\fP ليس مخصصًا لاستخدام التطبيقات. (لا تحدد POSIX حقلاً باسم \fIsa_restorer\fP.) يمكن العثور على بعض التفاصيل الإضافية حول الغرض من هذا الحقل في \fBsigreturn\fP(2). .P يحدد \fIsa_handler\fP الإجراء المراد ربطه بـ \fIsignum\fP ويمكن أن يكون واحدًا مما يلي: .IP \[bu] 3 \fBSIG_DFL\fP للإجراء المبدئي. .IP \[bu] \fBSIG_IGN\fP لتجاهل هذه الإشارة. .IP \[bu] مؤشر إلى دالة معالجة الإشارة. تستقبل هذه الدالة رقم الإشارة كمعامل وحيد لها. .P إذا حُدد \fBSA_SIGINFO\fP في \fIsa_flags\fP، فإن \fIsa_sigaction\fP (بدلاً من \fIsa_handler\fP) يحدد دالة معالجة الإشارة لـ \fIsignum\fP. تستقبل هذه الدالة ثلاثة معاملات، كما هو موضح أدناه. .P يحدد \fIsa_mask\fP قناعًا للإشارات التي ينبغي حجبها (أي إضافتها إلى قناع الإشارة للخيط الذي استدعِي فيه معالج الإشارة) أثناء تنفيذ معالج الإشارة. بالإضافة إلى ذلك، ستُحجب الإشارة التي تسببت في تشغيل المعالج، ما لم يُستخدم الوسم \fBSA_NODEFER\fP. .P يحدد \fIsa_flags\fP مجموعة من الوسوم التي تعدل سلوك الإشارة. وتُشكل عبر عملية OR بتية لصفر أو أكثر مما يلي: .TP \fBSA_NOCLDSTOP\fP إذا كان \fIsignum\fP هو \fBSIGCHLD\fP، فلا تستقبل إشعارًا عندما تتوقف العمليات الابنة (أي عندما تتلقى إحدى الإشارات \fBSIGSTOP\fP أو \fBSIGTSTP\fP أو \fBSIGTTIN\fP أو \fBSIGTTOU\fP) أو تستأنف العمل (أي تتلقى \fBSIGCONT\fP) (انظر \fBwait\fP(2)). هذا الوسم ذو مغزى فقط عند إنشاء معالج لـ \fBSIGCHLD\fP. .TP \fBSA_NOCLDWAIT\fP (منذ لينكس 2.6) .\" To be precise: Linux 2.5.60 -- MTK إذا كان \fIsignum\fP هو \fBSIGCHLD\fP، فلا تحول الأبناء إلى زومبي (zombies) عند إنهائهم. انظر أيضًا \fBwaitpid\fP(2). هذا الوسم ذو مغزى فقط عند إنشاء معالج لـ \fBSIGCHLD\fP، أو عند ضبط نزوع تلك الإشارة إلى \fBSIG_DFL\fP. .IP إذا ضُبط الوسم \fBSA_NOCLDWAIT\fP عند إنشاء معالج لـ \fBSIGCHLD\fP، فإن POSIX.1 تترك الأمر غير محدد عما إذا كانت إشارة \fBSIGCHLD\fP ستُولد عند إنهاء العملية الابنة. في لينكس، تُولد إشارة \fBSIGCHLD\fP في هذه الحالة؛ وفي بعض التطبيقات الأخرى، لا تُولد. .TP \fBSA_NODEFER\fP لا تضف الإشارة إلى قناع إشارة الخيط أثناء تنفيذ المعالج، ما لم تكن الإشارة محددة في \fIact.sa_mask\fP. وبالتالي، قد تُسلم نسخة أخرى من الإشارة إلى الخيط أثناء تنفيذه للمعالج. هذا الوسم ذو مغزى فقط عند إنشاء معالج إشارة. .IP \fBSA_NOMASK\fP هو مرادف قديم وغير معياري لهذا الوسم. .TP \fBSA_ONSTACK\fP استدعِ معالج الإشارة على مكدس إشارات بديل يوفره \fBsigaltstack\fP(2). إذا لم يكن المكدس البديل متاحًا، فسيُستخدم المكدس المبدئي. هذا الوسم ذو مغزى فقط عند إنشاء معالج إشارة. .TP \fBSA_RESETHAND\fP استعد إجراء الإشارة إلى الإجراء المبدئي عند الدخول إلى معالج الإشارة. هذا الوسم ذو مغزى فقط عند إنشاء معالج إشارة. .IP \fBSA_ONESHOT\fP هو مرادف قديم وغير معياري لهذا الوسم. .TP \fBSA_RESTART\fP وفّر سلوكًا متوافقًا مع دلالات إشارات BSD عبر جعل بعض استدعاءات النظام قابلة لإعادة التشغيل عبر الإشارات. هذا الوسم ذو مغزى فقط عند إنشاء معالج إشارة. انظر \fBsignal\fP(7) لمناقشة حول إعادة تشغيل استدعاءات النظام. .TP \fBSA_RESTORER\fP \fIليس مخصصًا لاستخدام التطبيقات\fP. يُستخدم هذا الوسم بواسطة مكتبات سي للإشارة إلى أن الحقل \fIsa_restorer\fP يحتوي على عنوان "signal trampoline". انظر \fBsigreturn\fP(2) لمزيد من التفاصيل. .TP \fBSA_SIGINFO\fP (منذ لينكس 2.2) .\" (The .\" .I sa_sigaction .\" field was added in Linux 2.1.86.) .\" يأخذ معالج الإشارة ثلاثة معاملات، وليس واحدًا. في هذه الحالة، ينبغي ضبط \fIsa_sigaction\fP بدلاً من \fIsa_handler\fP. هذا الوسم ذو مغزى فقط عند إنشاء معالج إشارة. .TP \fBSA_UNSUPPORTED\fP (منذ لينكس 5.11) يُستخدم للاستقصاء الآلي عن دعم بتات الوسوم. .IP إذا نجحت محاولة لتسجيل معالج مع ضبط هذا الوسم في \fIact\->sa_flags\fP إلى جانب وسوم أخرى قد لا تدعمها النواة، وأدى استدعاء \fBsigaction\fP() يليه مباشرة يحدد نفس رقم الإشارة ومع معامل \fIoldact\fP غير صفري (non\-NULL) إلى أن يكون \fBSA_UNSUPPORTED\fP \fIخاليًا\fP في \fIoldact\->sa_flags\fP، حينها يمكن استخدام \fIoldact\->sa_flags\fP كقناع بتات يصف أي من الوسوم التي قد تكون غير مدعومة هي في الواقع مدعومة. انظر قسم "الاستقصاء الآلي عن دعم بتات الوسوم" أدناه لمزيد من التفاصيل. .TP \fBSA_EXPOSE_TAGBITS\fP (منذ لينكس 5.11) عادةً، عند تسليم إشارة، تُمسح مجموعة من بتات الوسوم الخاصة بالبنية المعمارية من حقل \fIsi_addr\fP في \fIsiginfo_t\fP. إذا ضُبط هذا الوسم، فستُحفظ مجموعة فرعية محددة معماريًا من بتات الوسوم في \fIsi_addr\fP. .IP البرامج التي تحتاج إلى أن تكون متوافقة مع إصدارات لينكس الأقدم من 5.11 يجب أن تستخدم \fBSA_UNSUPPORTED\fP للاستقصاء عن الدعم. .SS "معامل siginfo_t لمعالج SA_SIGINFO" عندما يُحدد وسم \fBSA_SIGINFO\fP في \fIact.sa_flags\fP، يُمرر عنوان معالج الإشارة عبر حقل \fIact.sa_sigaction\fP. يأخذ هذا المعالج ثلاثة معاملات، كما يلي: .P .in +4n .EX void handler(int sig, siginfo_t *info, void *ucontext) { ... } .EE .in .P هذه المعاملات الثلاثة هي كما يلي .TP \fIsig\fP رقم الإشارة التي تسببت في استدعاء المعالج. .TP \fIinfo\fP مؤشر إلى \fIsiginfo_t\fP، وهو بنية تحتوي على معلومات إضافية حول الإشارة، كما هو موضح أدناه. .TP \fIucontext\fP هذا مؤشر إلى بنية \fIucontext_t\fP، مسبوك إلى \fIvoid\ *\fP. تحتوي البنية التي يشير إليها هذا الحقل على معلومات سياق الإشارة التي حُفظت في مكدس مساحة المستخدم بواسطة النواة؛ لمزيد من التفاصيل، انظر \fBsigreturn\fP(2). يمكن العثور على مزيد من المعلومات حول بنية \fIucontext_t\fP في \fBgetcontext\fP(3) و \fBsignal\fP(7). عادةً، لا تستخدم دالة المعالج المعامل الثالث. .P نوع البيانات \fIsiginfo_t\fP هو بنية بالحقول التالية: .P .in +4n .EX .\" FIXME .\" The siginfo_t 'si_trapno' field seems to be used .\" only on SPARC and Alpha; this page could use .\" a little more detail on its purpose there. .\" In the kernel: si_tid siginfo_t { int si_signo; /* رقم الإشارة */ int si_errno; /* قيمة errno */ int si_code; /* رمز الإشارة */ int si_trapno; /* رقم المصيدة الذي سبب الإشارة المولدة عتاديًا (غير مستخدم في أغلب البنيات) */ pid_t si_pid; /* معرف العملية المرسلة */ uid_t si_uid; /* معرف المستخدم الحقيقي للعملية المرسلة */ int si_status; /* قيمة الخروج أو الإشارة */ clock_t si_utime; /* وقت المستخدم المستهلك */ clock_t si_stime; /* وقت النظام المستهلك */ union sigval si_value; /* قيمة الإشارة */ int si_int; /* إشارة POSIX.1b */ void *si_ptr; /* إشارة POSIX.1b */ int si_overrun; /* عدد تجاوزات المؤقت؛ مؤقتات POSIX.1b */ int si_timerid; /* معرف المؤقت؛ مؤقتات POSIX.1b */ void *si_addr; /* موقع الذاكرة الذي سبب الخطأ */ long si_band; /* حدث الحزمة (كان \f[I]int\fR في glibc 2.3.2 وما قبلها) */ int si_fd; /* واصف الملف */ short si_addr_lsb; /* البت الأقل أهمية للعنوان (منذ لينكس 2.6.32) */ void *si_lower; /* الحد الأدنى عند حدوث انتهاك العنوان (منذ لينكس 3.19) */ void *si_upper; /* الحد الأعلى عند حدوث انتهاك العنوان (منذ لينكس 3.19) */ int si_pkey; /* مفتاح الحماية في PTE الذي سبب الخطأ (منذ لينكس 4.6) */ void *si_call_addr; /* عنوان تعليمة استدعاء النظام (منذ لينكس 3.5) */ int si_syscall; /* رقم استدعاء النظام المحاول (منذ لينكس 3.5) */ unsigned int si_arch; /* بنية استدعاء النظام المحاول (منذ لينكس 3.5) */ } .EE .in .P تُعرف الحقول \fIsi_signo\fP و \fIsi_errno\fP و \fIsi_code\fP لجميع الإشارات. (الحقل \fIsi_errno\fP غير مستخدم بشكل عام في لينكس.) قد تكون بقية البنية عبارة عن "union"، لذا ينبغي قراءة الحقول ذات المعنى للإشارة المحددة فقط: .IP \[bu] 3 الإشارات المرسلة بواسطة \fBkill\fP(2) و \fBsigqueue\fP(3) تملأ \fIsi_pid\fP و \fIsi_uid\fP. بالإضافة إلى ذلك، تملأ الإشارات المرسلة بواسطة \fBsigqueue\fP(3) الحقلين \fIsi_int\fP و \fIsi_ptr\fP بالقيم التي يحددها مرسل الإشارة؛ انظر \fBsigqueue\fP(3) لمزيد من التفاصيل. .IP \[bu] الإشارات المرسلة بواسطة مؤقتات POSIX.1b (منذ لينكس 2.6) تملأ \fIsi_overrun\fP و \fIsi_timerid\fP. حقل \fIsi_timerid\fP هو معرف داخلي تستخدمه النواة لتحديد المؤقت؛ وهو ليس نفس معرف المؤقت الذي يعيده \fBtimer_create\fP(2). حقل \fIsi_overrun\fP هو عدد تجاوزات المؤقت؛ وهي نفس المعلومات التي تُحصل عليها باستدعاء \fBtimer_getoverrun\fP(2). هذه الحقول هي امتدادات غير معيارية للينكس. .IP \[bu] الإشارات المرسلة لإشعار طابور الرسائل (انظر وصف \fBSIGEV_SIGNAL\fP في \fBmq_notify\fP(3)) تملأ \fIsi_int\fP/\fIsi_ptr\fP بقيمة \fIsigev_value\fP المزودة لـ \fBmq_notify\fP(3)؛ وتملأ \fIsi_pid\fP بمعرف العملية لمرسل الرسالة؛ و \fIsi_uid\fP بمعرف المستخدم الحقيقي لمرسل الرسالة. .IP \[bu] .\" FIXME . .\" When si_utime and si_stime where originally implemented, the .\" measurement unit was HZ, which was the same as clock ticks .\" (sysconf(_SC_CLK_TCK)). In Linux 2.6, HZ became configurable, and .\" was *still* used as the unit to return the info these fields, .\" with the result that the field values depended on the .\" configured HZ. Of course, the should have been measured in .\" USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to .\" convert to seconds. I have a queued patch to fix this: .\" http://thread.gmane.org/gmane.linux.kernel/698061/ . .\" This patch made it into Linux 2.6.27. .\" But note that these fields still don't return the times of .\" waited-for children (as is done by getrusage() and times() .\" and wait4()). Solaris 8 does include child times. إشارة \fBSIGCHLD\fP تملأ الحقول \fIsi_pid\fP و \fIsi_uid\fP و \fIsi_status\fP و \fIsi_utime\fP و \fIsi_stime\fP، موفرة معلومات حول العملية الابنة. حقل \fIsi_pid\fP هو معرف العملية للابن؛ و \fIsi_uid\fP هو معرف المستخدم الحقيقي للابن. يحتوي حقل \fIsi_status\fP على حالة خروج الابن (إذا كان \fIsi_code\fP هو \fBCLD_EXITED\fP)، أو رقم الإشارة التي تسببت في تغيير حالة العملية. يحتوي \fIsi_utime\fP و \fIsi_stime\fP على وقت CPU للمستخدم والنظام الذي استهلكته العملية الابنة؛ ولا تشمل هذه الحقول الأوقات التي استهلكها الأبناء الذين تم انتظارهم (على عكس \fBgetrusage\fP(2) و \fBtimes\fP(2)). حتى إصدار لينكس 2.6، ومنذ إصدار لينكس 2.6.27، تبلغ هذه الحقول عن وقت CPU بوحدات \fIsysconf(_SC_CLK_TCK)\fP. في أنوية لينكس 2.6 قبل الإصدار 2.6.27، تسبب خطأ برمي في جعل هذه الحقول تبلغ عن الوقت بوحدات "system jiffy" (القابلة للضبط) (انظر \fBtime\fP(7)). .IP \[bu] إشارات \fBSIGILL\fP و \fBSIGFPE\fP و \fBSIGSEGV\fP و \fBSIGBUS\fP و \fBSIGTRAP\fP تملأ \fIsi_addr\fP بعنوان الخطأ. في بعض البنيات المعمارية، تملأ هذه الإشارات أيضًا حقل \fIsi_trapno\fP. .IP بعض الأخطاء الفرعية لـ \fBSIGBUS\fP، وخاصة \fBBUS_MCEERR_AO\fP و \fBBUS_MCEERR_AR\fP، تملأ أيضًا \fIsi_addr_lsb\fP. يشير هذا الحقل إلى البت الأقل أهمية للعنوان المبلغ عنه وبالتالي مدى التلف. على سبيل المثال، إذا تفت صفحة كاملة، فسيحتوي \fIsi_addr_lsb\fP على \fIlog2(sysconf(_SC_PAGESIZE))\fP. عندما تُسلم \fBSIGTRAP\fP استجابة لحدث \fBptrace\fP(2) (PTRACE_EVENT_foo)، فلا يُملأ \fIsi_addr\fP، ولكن يُملأ \fIsi_pid\fP و \fIsi_uid\fP بمعرف العملية ومعرف المستخدم المسؤولين عن تسليم المصيدة. في حالة \fBseccomp\fP(2)، ستظهر العملية المتتبعة كأنها هي التي سلمت الحدث. \fBBUS_MCEERR_*\fP و \fIsi_addr_lsb\fP هي امتدادات خاصة بلينكس. .IP الخطأ الفرعي \fBSEGV_BNDERR\fP لـ \fBSIGSEGV\fP يملأ \fIsi_lower\fP و \fIsi_upper\fP. .IP الخطأ الفرعي \fBSEGV_PKUERR\fP لـ \fBSIGSEGV\fP يملأ \fIsi_pkey\fP. .IP \[bu] إشارة \fBSIGIO\fP/\fBSIGPOLL\fP (الاسمان مترادفان في لينكس) تملأ الحقلين \fIsi_band\fP و \fIsi_fd\fP. حدث \fIsi_band\fP هو قناع بتات يحتوي على نفس القيم التي يملؤها \fBpoll\fP(2) في حقل \fIrevents\fP. يشير حقل \fIsi_fd\fP إلى واصف الملف الذي وقع له حدث I/O؛ لمزيد من التفاصيل، انظر وصف \fBF_SETSIG\fP في \fBfcntl\fP(2). .IP \[bu] .\" commit a0727e8ce513fe6890416da960181ceb10fbfae6 .\" إشارة \fBSIGSYS\fP، التي تُولد (منذ لينكس 3.5) عندما يعيد مرشح seccomp القيمة \fBSECCOMP_RET_TRAP\fP، تملأ الحقول \fIsi_call_addr\fP و \fIsi_syscall\fP و \fIsi_arch\fP و \fIsi_errno\fP وحقولاً أخرى كما هو موضح في \fBseccomp\fP(2). .SS "حقل si_code" حقل \fIsi_code\fP داخل معامل \fIsiginfo_t\fP الذي يُمرر إلى معالج إشارة \fBSA_SIGINFO\fP هو قيمة (وليس قناع بتات) تشير إلى سبب إرسال هذه الإشارة. لحدث \fBptrace\fP(2)، سيحتوي \fIsi_code\fP على \fBSIGTRAP\fP ويكون حدث ptrace في البايت العالي: .P .in +4n .EX (SIGTRAP | PTRACE_EVENT_foo << 8). .EE .in .P بالنسبة للأحداث التي ليست من نوع \fBptrace\fP(2)، فإن القيم التي يمكن أن تظهر في \fIsi_code\fP موصوفة في بقية هذا القسم. منذ glibc 2.20، تُحصل على تعريفات أغلب هذه الرموز من \fI\fP عبر تعريف ماكروات اختبار الميزات (قبل تضمين \fIأي\fP ملف ترويسة) كما يلي: .IP \[bu] 3 \fB_XOPEN_SOURCE\fP بالقيمة 500 أو أكبر؛ .IP \[bu] \fB_XOPEN_SOURCE\fP و \fB_XOPEN_SOURCE_EXTENDED\fP؛ أو .IP \[bu] \fB_POSIX_C_SOURCE\fP بالقيمة 200809L أو أكبر. .P بالنسبة لثوابت \fBTRAP_*\fP، تتوفر تعريفات الرموز فقط في الحالتين الأوليين. قبل glibc 2.20، لم يكن يلزم وجود ماكروات اختبار ميزات للحصول على هذه الرموز. .P لإشارة عادية، توضح القائمة التالية القيم التي يمكن وضعها في \fIsi_code\fP لأي إشارة، مع ذكر سبب توليد الإشارة. .RS 4 .TP \fBSI_USER\fP \fBkill\fP(2). .TP \fBSI_KERNEL\fP أُرسلت بواسطة النواة. .TP \fBSI_QUEUE\fP \fBsigqueue\fP(3). .TP \fBSI_TIMER\fP انتهت صلاحية مؤقت POSIX، أو \fBsetitimer\fP(2) أو \fBalarm\fP(2). .TP \fBSI_MESGQ\fP (منذ لينكس 2.6.6) تغيرت حالة طابور رسائل POSIX؛ انظر \fBmq_notify\fP(3). .TP \fBSI_ASYNCIO\fP اكتملت عملية AIO. .TP \fBSI_SIGIO\fP صفّت \fBSIGIO\fP (حتى إصدار لينكس 2.2 فقط؛ بدءًا من لينكس 2.4 فصاعدًا تملأ \fBSIGIO\fP/\fBSIGPOLL\fP قيمة \fIsi_code\fP كما هو موضح أدناه). .TP \fBSI_TKILL\fP (منذ لينكس 2.4.19) .\" SI_DETHREAD is defined in Linux 2.6.9 sources, but isn't implemented .\" It appears to have been an idea that was tried during 2.5.6 .\" through to Linux 2.5.24 and then was backed out. \fBtkill\fP(2) أو \fBtgkill\fP(2). .TP \fBSI_ASYNCNL\fP اكتمل البحث غير المتزامن عن الاسم. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGILL\fP: .RS 4 .TP \fBILL_ILLOPC\fP رمز عملية غير صالح. .TP \fBILL_ILLOPN\fP معامل غير صالح. .TP \fBILL_ILLADR\fP نمط عنونة غير صالح. .TP \fBILL_ILLTRP\fP فخ غير صالح. .TP \fBILL_PRVOPC\fP رمز عملية ذو امتياز. .TP \fBILL_PRVREG\fP مسجل ذو امتياز. .TP \fBILL_COPROC\fP خطأ في المعالج المساعد. .TP \fBILL_BADSTK\fP خطأ داخلي في المكدس. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGFPE\fP: .RS 4 .TP \fBFPE_INTDIV\fP قسمة عدد صحيح على صفر. .TP \fBFPE_INTOVF\fP طاف العدد الصحيح. .TP \fBFPE_FLTDIV\fP قسمة عدد ذو فاصلة عائمة على صفر. .TP \fBFPE_FLTOVF\fP طاف العدد ذو الفاصلة العائمة. .TP \fBFPE_FLTUND\fP انحسر العدد ذو الفاصلة العائمة. .TP \fBFPE_FLTRES\fP نتيجة غير دقيقة للعدد ذو الفاصلة العائمة. .TP \fBFPE_FLTINV\fP عملية غير صالحة للعدد ذو الفاصلة العائمة. .TP \fBFPE_FLTSUB\fP الدليل خارج النطاق. .TP \fBFPE_FLTUNK\fP (منذ لينكس 4.17) استثناء غير مشخص في الفاصلة العائمة. .TP \fBFPE_CONDTRAP\fP (لـ PARISC فقط) فخ عند تحقق شرط. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGSEGV\fP: .RS 4 .TP \fBSEGV_MAPERR\fP العنوان غير مربوط بكائن. .TP \fBSEGV_ACCERR\fP صلاحيات غير صالحة للكائن المربوط. .TP \fBSEGV_BNDERR\fP (منذ لينكس 3.19) .\" commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83 فشلت فحوصات حدود العنوان. .TP \fBSEGV_PKUERR\fP (منذ لينكس 4.6) .\" commit cd0ea35ff5511cde299a61c21a95889b4a71464e رُفض الوصول بواسطة مفاتيح حماية الذاكرة. انظر \fBpkeys\fP(7). مفتاح الحماية الذي طُبق على هذا الوصول متاح عبر \fIsi_pkey\fP. .TP \fBSEGV_ACCADI\fP (منذ لينكس 4.17؛ لـ SPARC فقط) سلامة بيانات التطبيق (ADI) غير مفعلة للكائن المربوط. .TP \fBSEGV_ADIDERR\fP (منذ لينكس 4.17؛ لـ SPARC فقط) خطأ في كشف تلف الذاكرة المزعج. .TP \fBSEGV_ADIPERR\fP (منذ لينكس 4.17؛ لـ SPARC فقط) استثناء دقيق في كشف تلف الذاكرة. .TP \fBSEGV_MTEAERR\fP (منذ لينكس 5.10؛ لـ ARM فقط) خطأ غير متزامن في ملحق وسم الذاكرة (MTE). .TP \fBSEGV_MTESERR\fP (منذ لينكس 5.10؛ لـ ARM فقط) استثناء متزامن في ملحق وسم الذاكرة (MTE). .TP \fBSEGV_CPERR\fP (منذ لينكس 6.10) خطأ في حماية التحكم. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGBUS\fP: .RS 4 .TP \fBBUS_ADRALN\fP محاذاة عنوان غير صالحة. .TP \fBBUS_ADRERR\fP عنوان فيزيائي غير موجود. .TP \fBBUS_OBJERR\fP خطأ عتادي خاص بالكائن. .TP \fBBUS_MCEERR_AR\fP (منذ لينكس 2.6.32) استُهلك خطأ عتادي في الذاكرة عند فحص الآلة؛ الإجراء مطلوب. .TP \fBBUS_MCEERR_AO\fP (منذ لينكس 2.6.32) كُشف عن خطأ عتادي في الذاكرة في العملية ولكنه لم يُستهلك؛ الإجراء اختياري. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGTRAP\fP: .RS 4 .TP \fBTRAP_BRKPT\fP نقطة توقف العملية. .TP \fBTRAP_TRACE\fP فخ تتبع العملية. .TP \fBTRAP_BRANCH\fP (منذ لينكس 2.4؛ لـ IA64 فقط) فخ تفرع العملية المتخذ. .TP \fBTRAP_HWBKPT\fP (منذ لينكس 2.4؛ لـ IA64 فقط) نقطة توقف/مراقبة عتادية. .TP \fBTRAP_UNK\fP (منذ لينكس 4.18) فخ غير مشخص. .TP \fBTRAP_PERF\fP (منذ لينكس 5.13 وجليبنك 2.43) حدث Perf مع sigtrap=1. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGCHLD\fP: .RS 4 .TP \fBCLD_EXITED\fP خرجت العملية الابنة. .TP \fBCLD_KILLED\fP قُتلت العملية الابنة. .TP \fBCLD_DUMPED\fP أُنهيت العملية الابنة بشكل غير طبيعي. .TP \fBCLD_TRAPPED\fP وقعت العملية الابنة المُتتبعة في فخ. .TP \fBCLD_STOPPED\fP توقف الابن. .TP \fBCLD_CONTINUED\fP (منذ لينكس 2.6.9) استمر الابن المتوقف. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGIO\fP/\fBSIGPOLL\fP: .RS 4 .TP \fBPOLL_IN\fP مدخلات البيانات متاحة. .TP \fBPOLL_OUT\fP خبيئات المخرجات متاحة. .TP \fBPOLL_MSG\fP رسالة المدخلات متاحة. .TP \fBPOLL_ERR\fP خطأ إدخال/إخراج. .TP \fBPOLL_PRI\fP مدخلات عالية الأولوية متاحة. .TP \fBPOLL_HUP\fP فُصل الجهاز. .RE .P يمكن وضع القيم التالية في \fIsi_code\fP لإشارة \fBSIGSYS\fP: .RS 4 .TP \fBSYS_SECCOMP\fP (منذ لينكس 3.5 وglibc 2.43) أُطلق بواسطة قاعدة مرشح \fBseccomp\fP(2). .TP \fBSYS_USER_DISPATCH\fP (منذ لينكس 5.11 وglibc 2.43) أُطلق إرسال مستخدم استدعاء النظام (Syscall user dispatch). .RE .P يمكن وضع القيمة التالية في \fIsi_code\fP لإشارة \fBSIGEMT\fP: .RS 4 .TP \fBEMT_TAGOVF\fP (SPARC فقط) طفح الوسم. .RE .SS "سبر دعم بتات الأعلام ديناميكيًا" يقبل استدعاء \fBsigaction\fP() في لينكس تعيين بتات غير معروفة في \fIact\->sa_flags\fP دون خطأ. سلوك النواة بدءًا من لينكس 5.11 هو أن استدعاء \fBsigaction\fP() ثانٍ سيمسح البتات غير المعروفة من \fIoldact\->sa_flags\fP. ومع ذلك، تاريخيًا، كان استدعاء \fBsigaction\fP() ثانٍ يترك تلك البتات معينة في \fIoldact\->sa_flags\fP عادةً. .P هذا يعني أن دعم الأعلام الجديدة لا يمكن كشفه ببساطة عبر اختبار علم في \fIsa_flags\fP، ويجب على البرنامج اختبار مسح \fBSA_UNSUPPORTED\fP قبل الاعتماد على محتويات \fIsa_flags\fP. .P بما أن سلوك معالج الإشارة لا يمكن ضمانه ما لم ينجح الفحص، فمن الحكمة إما حجب الإشارة المتأثرة أثناء تسجيل المعالج وإجراء الفحص في هذه الحالة، أو عندما لا يكون ذلك ممكنًا، على سبيل المثال إذا كانت الإشارة متزامنة، إصدار استدعاء \fBsigaction\fP() الثاني داخل معالج الإشارة نفسه. .P في النوى التي لا تدعم علمًا محددًا، يكون سلوك النواة كما لو أن العلم لم يُعين، حتى لو عُين العلم في \fIact\->sa_flags\fP. .P الأعلام \fBSA_NOCLDSTOP\fP و\fBSA_NOCLDWAIT\fP و\fBSA_SIGINFO\fP و\fBSA_ONSTACK\fP و\fBSA_RESTART\fP و\fBSA_NODEFER\fP و\fBSA_RESETHAND\fP، وإذا كانت معرّفة بواسطة البنية، \fBSA_RESTORER\fP، قد لا تُسبر بشكل موثوق باستخدام هذه الآلية، لأنها قُدمت قبل لينكس 5.11. ومع ذلك، وبشكل عام، قد تفترض البرامج أن هذه الأعلام مدعومة، بما أنها دُعمت جميعًا منذ لينكس 2.6، الذي أُصدر في عام 2003. .P انظر قسم الأمثلة أدناه للحصول على عرض توضيحي لاستخدام \fBSA_UNSUPPORTED\fP. .SH "قيمة الإرجاع" يعيد \fBsigaction\fP() القيمة 0 عند النجاح؛ وعند الخطأ، يُعاد \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEFAULT\fP يشير \fIact\fP أو \fIoldact\fP إلى ذاكرة ليست جزءًا صالحًا من مساحة عناوين العملية. .TP \fBEINVAL\fP حُددت إشارة غير صالحة. سيُولد هذا أيضًا إذا أُجريت محاولة لتغيير الإجراء الخاص بـ \fBSIGKILL\fP أو \fBSIGSTOP\fP، واللذين لا يمكن صيدهما أو تجاهلهما. .SH الإصدارات .SS "الاختلافات بين مكتبة C والنواة" تعطي دالة تغليف glibc لـ \fBsigaction\fP() خطأ (\fBEINVAL\fP) عند محاولات تغيير ترتيب إشارتي الزمن الحقيقي المستخدمتين داخليًا بواسطة تنفيذ خيوط NPTL. راجع \fBnptl\fP(7) للتفاصيل. .P في البنيات التي يقع فيها ترامبولين الإشارة (signal trampoline) في مكتبة C، تضع دالة تغليف glibc لـ \fBsigaction\fP() عنوان كود الترامبولين في حقل \fIact.sa_restorer\fP وتعين العلم \fBSA_RESTORER\fP في حقل \fIact.sa_flags\fP. راجع \fBsigreturn\fP(2). .P سُمي استدعاء نظام لينكس الأصلي \fBsigaction\fP(). ومع ذلك، مع إضافة إشارات الزمن الحقيقي في لينكس 2.2، لم يعد نوع \fIsigset_t\fP ثابت الحجم (32 بت) الذي يدعمه استدعاء النظام ذاك مناسبًا للغرض. وبناءً عليه، أُضيف استدعاء نظام جديد، \fBrt_sigaction\fP()، لدعم نوع \fIsigset_t\fP الموسع. يأخذ استدعاء النظام الجديد وسيطًا رابعًا، \fIsize_t sigsetsize\fP، والذي يحدد الحجم بالبايت لمجموعات الإشارات في \fIact.sa_mask\fP و\fIoldact.sa_mask\fP. يُطلب حاليًا أن تكون قيمة هذا الوسيط \fIsizeof(sigset_t)\fP (وإلا سينتج الخطأ \fBEINVAL\fP). تخفي دالة تغليف \fBsigaction\fP() في glibc هذه التفاصيل عنا، وتستدعي \fBrt_sigaction\fP() بشفافية عندما توفره النواة. .SH المعايير POSIX.1\-2024. .SH التاريخ .\" SVr4 does not document the EINTR condition. POSIX.1\-2001، SVr4. .P منع معيار POSIX.1\-1990 ضبط إجراء \fBSIGCHLD\fP على \fBSIG_IGN\fP. سمح POSIX.1\-2001 وما بعده بهذا الاحتمال، بحيث يمكن استخدام تجاهل \fBSIGCHLD\fP لمنع إنشاء العمليات الزومبي (انظر \fBwait\fP(2)). ومع ذلك، تختلف سلوكيات BSD و System\ V التاريخية فيما يخص تجاهل \fBSIGCHLD\fP، لذا فإن الطريقة الوحيدة المحمولة تمامًا لضمان عدم تحول الأبناء المنتهين إلى زومبي هي صيد إشارة \fBSIGCHLD\fP وتنفيذ \fBwait\fP(2) أو ما شابه. .P حدد POSIX.1\-1990 العلم \fBSA_NOCLDSTOP\fP فقط. أضاف POSIX.1\-2001 الأعلام \fBSA_NOCLDWAIT\fP و\fBSA_NODEFER\fP و\fBSA_ONSTACK\fP و\fBSA_RESETHAND\fP و\fBSA_RESTART\fP و\fBSA_SIGINFO\fP كملحقات XSI. نقل POSIX.1\-2008 الأعلام \fBSA_NODEFER\fP و\fBSA_RESETHAND\fP و\fBSA_RESTART\fP و\fBSA_SIGINFO\fP إلى المواصفات الأساسية. قد يكون استخدام هذه القيم الأخيرة في \fIsa_flags\fP أقل قابلية للنقل في التطبيقات الموجهة لتنفيذات يونكس القديمة. .P العلم \fBSA_RESETHAND\fP متوافق مع علم SVr4 الذي يحمل الاسم نفسه. .P العلم \fBSA_NODEFER\fP متوافق مع علم SVr4 الذي يحمل الاسم نفسه في النوى 1.3.9 وما بعدها. في النوى الأقدم، سمح تنفيذ لينكس باستلام أي إشارة، وليس فقط تلك التي نثبتها (مما يتجاوز فعليًا أي إعدادات لـ \fIsa_mask\fP). .SH ملاحظات يرث الابن الذي أُنشِئَ عبر \fBfork\fP(2) نسخة من ترتيبات إشارات والده. أثناء عملية \fBexecve\fP(2)، تُعاد ضبط ترتيبات الإشارات التي يُتعامل معها إلى الوضع المبدئي؛ بينما تظل ترتيبات الإشارات المتجاهلة دون تغيير. .P وفقًا لـ POSIX، يكون سلوك العملية غير محدد بعد تجاهلها لإشارة \fBSIGFPE\fP أو \fBSIGILL\fP أو \fBSIGSEGV\fP التي لم تُنتج بواسطة \fBkill\fP(2) أو \fBraise\fP(3). قسمة الأعداد الصحيحة على صفر لها نتيجة غير محددة. في بعض البنيات ستنتج إشارة \fBSIGFPE\fP. (كما أن قسمة أصغر عدد صحيح سالب على \-1 قد تنتج \fBSIGFPE\fP). تجاهل هذه الإشارة قد يؤدي إلى حلقة مفرغة. .P يمكن استدعاء \fBsigaction\fP() مع وسيط ثانٍ NULL للاستعلام عن معالج الإشارة الحالي. يمكن استخدامه أيضًا للتحقق مما إذا كانت إشارة معينة صالحة للآلة الحالية عبر استدعائه مع وسيطين ثانٍ وثالث قيمتهما NULL. .P لا يمكن حجب \fBSIGKILL\fP أو \fBSIGSTOP\fP (عن طريق تحديدهما في \fIsa_mask\fP). تُتجاهل محاولات القيام بذلك بصمت. .P انظر \fBsigsetops\fP(3) للحصول على تفاصيل حول معالجة مجموعات الإشارات. .P انظر \fBsignal\-safety\fP(7) للحصول على قائمة بالدوال الآمنة للإشارات غير المتزامنة (async\-signal\-safe) التي يمكن استدعاؤها بأمان من داخل معالج الإشارة. .P .\" يضمن معيار POSIX فقط \fBSI_TIMER\fP للإشارات التي أُنشئت بواسطة \fItimer_create\fP(2). التنفيذات حرة في توفيرها أيضًا لأنواع أخرى من الموقتات. سلوك لينكس يطابق NetBSD. .SS "غير موثق" قبل تقديم \fBSA_SIGINFO\fP، كان من الممكن أيضًا الحصول على بعض المعلومات الإضافية حول الإشارة. نُفذ ذلك عبر توفير معالج إشارة \fIsa_handler\fP مع وسيط ثانٍ من النوع \fIstruct sigcontext\fP، وهو نفس الهيكل الذي يُمرر في حقل \fIuc_mcontext\fP لهيكل \fIucontext\fP الذي يُمرر (عبر مؤشر) في الوسيط الثالث لمعالج \fIsa_sigaction\fP. انظر مصادر نواة لينكس ذات الصلة للتفاصيل. هذا الاستخدام مهجور الآن. .SH العلل عند إيصال إشارة ناتجة عن استثناء عتادي مع معالج \fBSA_SIGINFO\fP، لا توفر النواة دائمًا قيمًا ذات معنى لجميع حقول \fIsiginfo_t\fP ذات الصلة بتلك الإشارة. على سبيل المثال، عندما تُستدعى تعليمات x86 \fIint\fP مع وسيط محظور (أي رقم غير 3 أو 128)، تُوصل إشارة \fBSIGSEGV\fP، ولكن حقول \fIsiginfo_t\fP الممررة لمعالج الإشارة تكون جميعها مضبوطة على الصفر باستثناء \fIsi_signo\fP و\fIsi_code\fP، حتى لو كان ينبغي ضبط حقول أخرى (على سبيل المثال، يجب أن يكون \fIsi_addr\fP غير صفري لجميع إشارات \fBSIGSEGV\fP). .P .\" commit 69be8f189653cd81aae5a74e26615b12871bb72e حتى لينكس 2.6.13 (بما في ذلك هذا الإصدار)، كان تحديد \fBSA_NODEFER\fP في \fIsa_flags\fP يمنع ليس فقط حجب الإشارة الموصلة أثناء تنفيذ المعالج، ولكن أيضًا الإشارات المحددة في \fIsa_mask\fP. أُصلحت هذه العلة في لينكس 2.6.14. .SH أمثلة انظر \fBmprotect\fP(2). .SS "سبر دعم الأعلام" ينتهي البرنامج التجريبي التالي بحالة \fBEXIT_SUCCESS\fP إذا تقرر أن \fBSA_EXPOSE_TAGBITS\fP مدعوم، و \fBEXIT_FAILURE\fP خلاف ذلك. .P .\" SRC BEGIN (sigaction.c) .EX #include #include #include #include \& static void handler(int signo, siginfo_t *info, void *context) { struct sigaction oldact; \& if (sigaction(SIGSEGV, NULL, &oldact) == \-1 || (oldact.sa_flags & SA_UNSUPPORTED) || !(oldact.sa_flags & SA_EXPOSE_TAGBITS)) { _exit(EXIT_FAILURE); } _exit(EXIT_SUCCESS); } \& int main(void) { struct sigaction act = { 0 }; \& act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; act.sa_sigaction = &handler; if (sigaction(SIGSEGV, &act, NULL) == \-1) { perror("sigaction"); exit(EXIT_FAILURE); } \& raise(SIGSEGV); } .EE .\" SRC END .SH "انظر أيضًا" \fBkill\fP(1)، \fBkill\fP(2)، \fBpause\fP(2)، \fBpidfd_send_signal\fP(2)، \fBrestart_syscall\fP(2)، \fBseccomp\fP(2)، \fBsigaltstack\fP(2)، \fBsignal\fP(2)، \fBsignalfd\fP(2)، \fBsigpending\fP(2)، \fBsigprocmask\fP(2)، \fBsigreturn\fP(2)، \fBsigsuspend\fP(2)، \fBwait\fP(2)، \fBkillpg\fP(3)، \fBraise\fP(3)، \fBsiginterrupt\fP(3)، \fBsigqueue\fP(3)، \fBsigsetops\fP(3)، \fBsigvec\fP(3)، \fBcore\fP(5)، \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 .