.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, Thomas Koenig .\" Copyright 2002-2020, 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 signal 7 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم إشارة \- نظرة عامة على الإشارات .SH الوصف يدعم لينكس كلاً من إشارات POSIX الموثوقة (يُشار إليها فيما يلي باسم "الإشارات القياسية") وإشارات POSIX للوقت الحقيقي. .SS "ترتيبات الإشارة" لكل إشارة \fIترتيب\fP (disposition) حالي، يحدد كيفية سلوك العملية عند تسلمها لتلك الإشارة. .P تحدد المدخلات في عمود "الإجراء" (Action) في الجدول أدناه الترتيب الافتراضي لكل إشارة، كما يلي: .TP إنهاء (Term) الإجراء الافتراضي هو إنهاء العملية. .TP تجاهل (Ign) الإجراء الافتراضي هو تجاهل الإشارة. .TP لب (Core) الإجراء الافتراضي هو إنهاء العملية وتفريغ اللب (انظر \fBcore\fP(5)). .TP إيقاف (Stop) الإجراء الافتراضي هو إيقاف العملية. .TP متابعة (Cont) الإجراء المبدئي هو متابعة تنفيذ العملية إذا كانت متوقفة حالياً. .P تستطيع العملية تغيير ترتيب الإشارة باستخدام \fBsigaction\fP(2) أو \fBsignal\fP(2). (يعد الأخير أقل قابلية للنقل عند إنشاء معالج إشارة؛ راجع \fBsignal\fP(2) للتفاصيل.) باستخدام استدعاءات النظام هذه، يمكن للعملية اختيار أحد السلوكيات التالية عند تسليم الإشارة: تنفيذ الإجراء المبدئي؛ أو تجاهل الإشارة؛ أو التقاط الإشارة بواسطة \fIمعالج إشارة\fP، وهي دالة يحددها المبرمج تُستدعى آلياً عند تسليم الإشارة. .P مبدئياً، يُستدعى معالج الإشارة في مكدس العملية العادي. من الممكن الترتيب بحيث يستخدم معالج الإشارة مكدساً بديلاً؛ راجع \fBsigaltstack\fP(2) لمناقشة كيفية القيام بذلك ومتى قد يكون مفيداً. .P ترتيب الإشارة هو سمة خاصة بالعملية: في التطبيقات متعددة الخيوط، يكون ترتيب إشارة معينة هو نفسه لجميع الخيوط. .P يرث الابن الذي تم إنشاؤه عبر \fBfork\fP(2) نسخة من ترتيبات إشارات والده. أثناء عملية \fBexecve\fP(2)، يتم إعادة ضبط ترتيبات الإشارات التي يتم التعامل معها إلى الوضع الافتراضي؛ بينما تظل ترتيبات الإشارات المتجاهلة دون تغيير. .SS "إرسال إشارة" تسمح استدعاءات النظام ودوال المكتبة التالية للمستدعي بإرسال إشارة: .TP \fBraise\fP(3) يرسل إشارة إلى خيط الاستدعاء. .TP \fBkill\fP(2) يرسل إشارة إلى عملية محددة، أو إلى جميع أعضاء مجموعة عمليات محددة، أو إلى جميع العمليات في النظام. .TP \fBpidfd_send_signal\fP(2) يُرسل إشارة إلى عملية محددة بواسطة واصف ملف PID. .TP \fBkillpg\fP(3) يُرسل إشارة إلى جميع أعضاء مجموعة عمليات محددة. .TP \fBpthread_kill\fP(3) يُرسل إشارة إلى خيط POSIX محدد في نفس عملية المستدعِي. .TP \fBtgkill\fP(2) يُرسل إشارة إلى خيط محدد داخل عملية معينة. (هذا هو استدعاء النظام المستخدم لتنفيذ \fBpthread_kill\fP(3).) .TP \fBsigqueue\fP(3) يُرسل إشارة وقت حقيقي مع بيانات مرفقة إلى عملية محددة. .SS "انتظار التقاط إشارة" تقوم استدعاءات النظام التالية بتعليق تنفيذ خيط الاستدعاء حتى يتم التقاط إشارة (أو حتى تقوم إشارة غير معالجة بإنهاء العملية): .TP \fBpause\fP(2) يعلق التنفيذ حتى يتم التقاط أي إشارة. .TP \fBsigsuspend\fP(2) .\" يُغيّر قناع الإشارة مؤقتاً (انظر أدناه) ويُعلّق التنفيذ حتى تُلقط إحدى الإشارات غير المقنعة. .SS "قبول إشارة بشكل متزامن" بدلاً من التقاط الإشارة بشكل غير متزامن عبر معالج الإشارة، من الممكن قبول الإشارة بشكل متزامن، أي حجب التنفيذ حتى يتم تسليم الإشارة، وعندها تعيد النواة معلومات حول الإشارة إلى المستدعي. هناك طريقتان عامتان للقيام بذلك: .IP \[bu] 3 تُعلّق \fBsigwaitinfo\fP(2) و \fBsigtimedwait\fP(2) و \fBsigwait\fP(3) التنفيذ حتى تُسلّم إحدى الإشارات في مجموعة محددة. يعيد كل من هذه الاستدعاءات معلومات حول الإشارة المُسلّمة. .IP \[bu] تعيد \fBsignalfd\fP(2) واصف ملف يمكن استخدامه لقراءة معلومات حول الإشارات التي تُسلّم إلى المستدعِي. تحظر كل عملية \fBread\fP(2) من واصف الملف هذا التنفيذ حتى تُسلّم إحدى الإشارات في المجموعة المحددة في استدعاء \fBsignalfd\fP(2) إلى المستدعِي. تحتوي الخبيئة التي تعيدها \fBread\fP(2) على هيكل يصف الإشارة. .SS "قناع الإشارة والإشارات المعلقة" قد تكون الإشارة \fIمحجوبة\fP، وهذا يعني أنها لن تُسلّم حتى يتم إلغاء حجبها لاحقاً. يُقال عن الإشارة أنها \fIمعلقة\fP في الفترة ما بين وقت توليدها ووقت تسليمها. .P لكل خيط في العملية \fIقناع إشارة\fP مستقل، يحدد مجموعة الإشارات التي يحجبها الخيط حالياً. يمكن للخيط التحكم في قناع إشارته باستخدام \fBpthread_sigmask\fP(3). في التطبيقات التقليدية أحادية الخيوط، يمكن استخدام \fBsigprocmask\fP(2) للتحكم في قناع الإشارة. .P يرث الابن المنشأ عبر \fBfork\fP(2) نسخة من قناع إشارات والده؛ ويتم الحفاظ على قناع الإشارات عبر عملية \fBexecve\fP(2). .P قد تكون الإشارة موجهة للعملية أو موجهة للخيط. الإشارة الموجهة للعملية هي تلك التي تستهدف العملية ككل (وبالتالي تكون معلقة لها). قد تكون الإشارة موجهة للعملية لأنها وُلدت بواسطة النواة لأسباب أخرى غير استثناءات العتاد، أو لأنها أُرسلت باستخدام \fBkill\fP(2) أو \fBsigqueue\fP(3). أما الإشارة الموجهة للخيط فهي التي تستهدف خيطاً معيناً. قد تكون الإشارة موجهة للخيط لأنها وُلدت نتيجة لتنفيذ تعليمات معينة بلغة الآلة أدت إلى إطلاق استثناء عتادي (مثل \fBSIGSEGV\fP للوصول غير الصالح للذاكرة، أو \fBSIGFPE\fP لخطأ رياضي)، أو لأنها استهدفت خيطاً محدداً باستخدام واجهات مثل \fBtgkill\fP(2) أو \fBpthread_kill\fP(3). .P .\" Joseph C.\& Sible notes: .\" On Linux, if the main thread has the signal unblocked, then the kernel .\" will always deliver the signal there, citing this kernel code .\" .\" Per this comment in kernel/signal.c since time immemorial: .\" .\" /* .\" * Now find a thread we can wake up to take the signal off the queue. .\" * .\" * If the main thread wants the signal, it gets first crack. .\" * Probably the least surprising to the average bear. .\" */ .\" .\" But this does not mean the signal will be delivered only in the .\" main thread, since if a handler is already executing in the main thread .\" (and thus the signal is blocked in that thread), then a further .\" might be delivered in a different thread. .\" يمكن تسليم الإشارة الموجهة للعملية إلى أي خيط من الخيوط التي لا تحجب تلك الإشارة حالياً. إذا كان هناك أكثر من خيط لا يحجب الإشارة، تختار النواة خيطاً عشوائياً لتسليم الإشارة إليه. .P يمكن للخيط الحصول على مجموعة الإشارات المعلقة لديه حالياً باستخدام \fBsigpending\fP(2). تتكون هذه المجموعة من اتحاد مجموعة الإشارات المعلقة الموجهة للعملية ومجموعة الإشارات المعلقة الموجهة لخيط الاستدعاء نفسه. .P .\" يكون لدى الابن المنشأ عبر \fBfork\fP(2) في البداية مجموعة إشارات معلقة فارغة؛ ويتم الحفاظ على مجموعة الإشارات المعلقة عبر عملية \fBexecve\fP(2). .SS "تنفيذ معالجات الإشارة" كلما حدث انتقال من وضع النواة إلى وضع المستخدم (على سبيل المثال، عند العودة من استدعاء نظام أو جدولة خيط على المعالج)، تتحقق النواة مما إذا كانت هناك إشارة معلقة غير محجوبة أنشأت لها العملية معالج إشارة. إذا وُجدت مثل هذه الإشارة، تتم الخطوات التالية: .IP (1) 5 تقوم النواة بالخطوات التحضيرية اللازمة لتنفيذ معالج الإشارة: .RS .IP (1.1) 7 تُزال الإشارة من مجموعة الإشارات المعلقة. .IP (1.2) إذا تم تثبيت معالج الإشارة عبر استدعاء \fBsigaction\fP(2) مع تحديد علم \fBSA_ONSTACK\fP وكان الخيط قد عرّف مكدساً بديلاً للإشارة (باستخدام \fBsigaltstack\fP(2))، فسيتم تثبيت ذلك المكدس. .IP (1.3) يتم حفظ أجزاء مختلفة من السياق المتعلق بالإشارة في إطار خاص يتم إنشاؤه على المكدس. تتضمن المعلومات المحفوظة ما يلي: .RS .IP \[bu] 3 سجل عداد البرنامج (أي عنوان التعليمات التالية في البرنامج الرئيسي التي يجب تنفيذها عند عودة معالج الإشارة)؛ .IP \[bu] حالة السجلات الخاصة بالمعمارية والمطلوبة لاستئناف البرنامج المقاطع؛ .IP \[bu] قناع الإشارة الحالي للخيط؛ .IP \[bu] إعدادات مكدس الإشارة البديل للخيط. .RE .IP إذا ثُبت معالج الإشارة باستخدام الراية \fBSA_SIGINFO\fP لـ \fBsigaction\fP(2)، فستكون المعلومات المذكورة أعلاه متاحة عبر كائن \fIucontext_t\fP الذي يشير إليه المعامل الثالث لمعالج الإشارة. يعكس هذا الكائن الحالة التي أُرسلت عندها الإشارة، بدلاً من الحالة داخل المعالج؛ على سبيل المثال، لن يحتوي قناع الإشارات المحجوبة المخزن في هذا الكائن على قناع الإشارات الجديدة المحجوبة عبر \fBsigaction\fP(2). .IP (1.4) تُضاف أي إشارات محددة في \fIact\->sa_mask\fP عند تسجيل المعالج باستخدام \fBsigaction\fP(2) إلى قناع إشارة الخيط. كما تُضاف الإشارة التي يتم تسليمها حالياً إلى قناع الإشارة أيضاً، ما لم يتم تحديد \fBSA_NODEFER\fP عند تسجيل المعالج. وبالتالي تُحجب هذه الإشارات أثناء تنفيذ المعالج. .RE .IP (2) تبني النواة إطاراً لمعالج الإشارة على المكدس. وتضبط عداد البرنامج للخيط ليشير إلى أول تعليمات دالة معالج الإشارة، وتعد عنوان العودة لتلك الدالة ليشير إلى جزء من كود وضع المستخدم يُعرف باسم "ترامبولين الإشارة" (موصوف في \fBsigreturn\fP(2)). .IP (3) تُعيد النواة التحكم إلى مساحة المستخدم، حيث يبدأ التنفيذ عند بداية دالة معالج الإشارة. .IP (4) عندما تعود دالة معالج الإشارة، ينتقل التحكم إلى كود الـ trampoline الخاص بالإشارة. .IP (5) يستدعي ترامبولين الإشارة \fBsigreturn\fP(2)، وهو استدعاء نظام يستخدم المعلومات الموجودة في إطار المكدس الذي أُنشئ في الخطوة 1 لاستعادة حالة الخيط كما كانت قبل استدعاء معالج الإشارة. يتم استعادة قناع إشارة الخيط وإعدادات مكدس الإشارة البديل كجزء من هذا الإجراء. عند اكتمال استدعاء \fBsigreturn\fP(2)، تعيد النواة التحكم إلى وضع المستخدم، ويستأنف الخيط تنفيذه من النقطة التي توقف عندها. .P لاحظ أنه إذا لم يعد معالج الإشارة (على سبيل المثال، نُقل التحكم خارج المعالج باستخدام \fBsiglongjmp\fP(3)، أو نفذ المعالج برنامجاً جديداً باستخدام \fBexecve\fP(2))، فلن تُنفذ الخطوة النهائية. وبشكل خاص، تقع في مثل هذه السيناريوهات على عاتق المبرمج مسؤولية استعادة حالة قناع الإشارة (باستخدام \fBsigprocmask\fP(2))، إذا كان المطلوب إلغاء حجب الإشارات التي حُجبت عند الدخول إلى معالج الإشارة. (لاحظ أن \fBsiglongjmp\fP(3) قد يستعيد قناع الإشارة أو لا يستعيده، اعتماداً على قيمة \fIsavesigs\fP التي حُددت في استدعاء \fBsigsetjmp\fP(3) المقابل). .P .\" من وجهة نظر النواة، تنفيذ كود معالج الإشارة هو تماماً مثل تنفيذ أي كود آخر في مساحة المستخدم. أي أن النواة لا تسجل أي معلومات حالة خاصة تشير إلى أن الخيط ينفذ حالياً داخل معالج إشارة. تُحفظ جميع معلومات الحالة الضرورية في سجلات مساحة المستخدم ومكدس مساحة المستخدم. وبالتالي، فإن العمق الذي يمكن من خلاله استدعاء معالجات الإشارة المتداخلة محدود فقط بمكدس مساحة المستخدم (وتصميم البرمجيات السليم!). .SS "الإشارات القياسية" يدعم لينكس الإشارات القياسية المدرجة أدناه. يشير العمود الثاني من الجدول إلى المعيار الذي حدد الإشارة (إن وجد): "P1990" تشير إلى أن الإشارة موصوفة في معيار POSIX.1\-1990 الأصلي؛ و "P2001" تشير إلى أن الإشارة أُضيفت أو تغير تعريفها في SUSv2 و POSIX.1\-2001. أما "P2024" فتشير إلى أن الإشارة أُضيفت أو تغير تعريفها في POSIX.1\-2024. .TS l c c l lB c c l. الإشارة المعيار الإجراء التعليق _ SIGABRT P1990 لب (Core) إشارة الإجهاض من \f[B]abort\fR(3) SIGALRM P1990 إنهاء (Term) إشارة الموقت من \f[B]alarm\fR(2) SIGBUS P2001 لب (Core) خطأ ناقل (وصول خاطئ للذاكرة) SIGCHLD P2001 تجاهل (Ign) توقف الطفل أو أُنهي أو استمر SIGCLD \- تجاهل (Ign) مرادف لـ \f[B]SIGCHLD\fR SIGCONT P1990 متابعة (Cont) واصِل إذا كانت العملية متوقفة SIGEMT \- إنهاء (Term) مصيدة محاكي SIGFPE P1990 لب (Core) عملية حسابية خاطئة SIGHUP P1990 إنهاء (Term) كُشف عن تعليق في الطرفية المتحكمة أو موت العملية المتحكمة SIGILL P1990 لب (Core) تعليمة غير صالحة SIGINFO \- مرادف لـ \f[B]SIGPWR\fR SIGINT P1990 إنهاء (Term) مقاطعة من لوحة المفاتيح SIGIO \- إنهاء (Term) الإدخال/الإخراج متاح الآن (4.2BSD) SIGIOT \- لب (Core) مصيدة IOT. مرادف لـ \f[B]SIGABRT\fR SIGKILL P1990 إنهاء (Term) إشارة قتل SIGLOST \- إنهاء (Term) فُقد قفل الملف (غير مستخدم) SIGPIPE P1990 إنهاء (Term) أنبوب مكسور: كتابة إلى أنبوب بدون قراء؛ انظر \f[B]pipe\fR(7) SIGPOLL P2001 إنهاء (Term) حدث قابل للاستطلاع (Sys V)؛ مرادف لـ \f[B]SIGIO\fR SIGPROF P2001 إنهاء (Term) انتهى وقت مؤقت التشكيلة SIGPWR \- إنهاء (Term) فشل الطاقة (System V) SIGQUIT P1990 لب (Core) إنهاء من لوحة المفاتيح SIGSEGV P1990 لب (Core) إشارة ذاكرة غير صالحة SIGSTKFLT \- إنهاء (Term) خطأ في المكدس على المعالج المساعد (غير مستخدم) SIGSTOP P1990 إيقاف (Stop) أوقِف العملية SIGTSTP P1990 إيقاف (Stop) إيقاف مكتوب عند الطرفية SIGSYS P2001 لب (Core) استدعاء نظام سيئ (SVr4)؛ انظر أيضاً \f[B]seccomp\fR(2) SIGTERM P1990 إنهاء (Term) إشارة إنهاء SIGTRAP P2001 لب (Core) مصيدة تتبع/نقطة توقف SIGTTIN P1990 إيقاف (Stop) دخل طرفية لعملية خلفية SIGTTOU P1990 إيقاف (Stop) خرج طرفية لعملية خلفية SIGUNUSED \- لب (Core) مرادف لـ \f[B]SIGSYS\fR SIGURG P2001 تجاهل (Ign) حالة عاجلة على المقبس (4.2BSD) SIGUSR1 P1990 إنهاء (Term) إشارة معرفة من المستخدم 1 SIGUSR2 P1990 إنهاء (Term) إشارة معرفة من المستخدم 2 SIGVTALRM P2001 إنهاء (Term) ساعة منبه افتراضية (4.2BSD) SIGXCPU P2001 لب (Core) تجاوز حد وقت المعالج (4.2BSD)؛ انظر \f[B]setrlimit\fR(2) SIGXFSZ P2001 لب (Core) تجاوز حد حجم الملف (4.2BSD)؛ انظر \f[B]setrlimit\fR(2) SIGWINCH P2024 تجاهل (Ign) إشارة تغيير حجم النافذة (4.3BSD, Sun) .TE .P لا يمكن التقاط الإشارتين \fBSIGKILL\fP و \fBSIGSTOP\fP، أو حجبهما، أو تجاهلهما. .P حتى الإصدار 2.2 من لينكس وما قبله، كان السلوك المبدئي للإشارات \fBSIGSYS\fP و \fBSIGXCPU\fP و \fBSIGXFSZ\fP، و \fBSIGBUS\fP (على معماريات غير SPARC و MIPS) هو إنهاء العملية (بدون تفريغ الذاكرة core dump). (في بعض أنظمة يونكس الأخرى، الإجراء المبدئي لـ \fBSIGXCPU\fP و \fBSIGXFSZ\fP هو إنهاء العملية بدون تفريغ الذاكرة). يمتثل لينكس 2.4 لمتطلبات POSIX.1\-2001 لهذه الإشارات، حيث ينهي العملية مع تفريغ الذاكرة. .P لم تُحدد \fBSIGEMT\fP في POSIX.1\-2001، ومع ذلك تظهر في معظم أنظمة يونكس الأخرى، حيث يكون إجراؤها المبدئي عادةً هو إنهاء العملية مع تفريغ الذاكرة. .P عادةً ما تُتجاهل \fBSIGPWR\fP (التي لم تُحدد في POSIX.1\-2001) مبدئياً في أنظمة UNIX الأخرى التي تظهر فيها. .P .\" تُتجاهل \fBSIGIO\fP (التي لم تُحدد في POSIX.1\-2001) مبدئياً في عدة أنظمة UNIX أخرى. .SS "دلالات الجدولة والتسليم للإشارات القياسية" إذا كانت هناك إشارات قياسية متعددة معلقة لعملية ما، فإن ترتيب تسليم هذه الإشارات غير محدد. .P .\" لا تُوضع الإشارات القياسية في طابور. إذا أُنشئت مثيلات متعددة لإشارة قياسية بينما كانت تلك الإشارة محجوبة، فستُوسم مثيلة واحدة فقط من الإشارة على أنها معلقة (وستُسلم الإشارة مرة واحدة فقط عند إلغاء حجبها). في الحالة التي تكون فيها إشارة قياسية معلقة بالفعل، لا يتم استبدال بنية \fIsiginfo_t\fP (انظر \fBsigaction\fP(2)) المرتبطة بتلك الإشارة عند وصول مثيلات لاحقة من نفس الإشارة. وبالتالي، ستتلقى العملية المعلومات المرتبطة بالمثيلة الأولى للإشارة. .SS "ترقيم الإشارات للإشارات القياسية" تُعطى القيمة العددية لكل إشارة في الجدول أدناه. كما هو موضح في الجدول، تمتلك العديد من الإشارات قيمًا عددية مختلفة في معماريات مختلفة. توضح القيمة العددية الأولى في كل صف من الجدول رقم الإشارة على x86 و ARM ومعظم المعماريات الأخرى؛ والقيمة الثانية لـ Alpha و SPARC؛ والثالثة لـ MIPS؛ والأخيرة لـ PARISC. تشير الشرطة (\-) إلى أن الإشارة غائبة في المعمارية المقابلة. .TS l c c c c l l c c c c l lB c c c c l. الإشارة x86/ARM Alpha/ MIPS PARISC ملاحظات معظم الأنظمة الأخرى SPARC _ SIGHUP \01 \01 \01 \01 SIGINT \02 \02 \02 \02 SIGQUIT \03 \03 \03 \03 SIGILL \04 \04 \04 \04 SIGTRAP \05 \05 \05 \05 SIGABRT \06 \06 \06 \06 SIGIOT \06 \06 \06 \06 SIGBUS \07 10 10 10 SIGEMT \- \07 \07 \- SIGFPE \08 \08 \08 \08 SIGKILL \09 \09 \09 \09 SIGUSR1 10 30 16 16 SIGSEGV 11 11 11 11 SIGUSR2 12 31 17 17 SIGPIPE 13 13 13 13 SIGALRM 14 14 14 14 SIGTERM 15 15 15 15 SIGSTKFLT 16 \- \- \07 SIGCHLD 17 20 18 18 SIGCLD \- \- 18 \- SIGCONT 18 19 25 26 SIGSTOP 19 17 23 24 SIGTSTP 20 18 24 25 SIGTTIN 21 21 26 27 SIGTTOU 22 22 27 28 SIGURG 23 16 21 29 SIGXCPU 24 24 30 12 SIGXFSZ 25 25 31 30 SIGVTALRM 26 26 28 20 SIGPROF 27 27 29 21 SIGWINCH 28 28 20 23 SIGIO 29 23 22 22 SIGPOLL نفس SIGIO SIGPWR 30 29/\- 19 19 SIGINFO \- 29/\- \- \- SIGLOST \- \-/29 \- \- SIGSYS 31 12 12 31 SIGUNUSED 31 \- \- 31 .TE .P لاحظ ما يلي: .IP \[bu] 3 حيثما عُرفت، تكون \fBSIGUNUSED\fP مرادفة لـ \fBSIGSYS\fP. منذ الإصدار 2.26 من glibc، لم تعد \fBSIGUNUSED\fP معرفة في أي معمارية. .IP \[bu] .\" الإشارة 29 هي \fBSIGINFO\fP/\fBSIGPWR\fP (مرادفان لنفس القيمة) في Alpha ولكنها \fBSIGLOST\fP في SPARC. .SS "إشارات الوقت الحقيقي" بدءاً من لينكس 2.2، يدعم لينكس إشارات الوقت الحقيقي كما عُرفت في الأصل في ملحقات الوقت الحقيقي لـ POSIX.1b (والمضمنة الآن في POSIX.1\-2001). يُحدد نطاق إشارات الوقت الحقيقي المدعومة بواسطة وحدات الماكرو \fBSIGRTMIN\fP و \fBSIGRTMAX\fP. يتطلب POSIX.1\-2001 أن يدعم التنفيذ ما لا يقل عن \fB_POSIX_RTSIG_MAX\fP (8) من إشارات الوقت الحقيقي. .P تدعم نواة لينكس نطاقاً من 33 إشارة وقت حقيقي مختلفة، مرقمة من 32 إلى 64. ومع ذلك، يستخدم تنفيذ خيوط glibc POSIX داخلياً إشارتي وقت حقيقي (لـ NPTL) أو ثلاث إشارات (لـ LinuxThreads) (انظر \fBpthreads\fP(7))، ويعدل قيمة \fBSIGRTMIN\fP بشكل مناسب (إلى 34 أو 35). ونظراً لأن نطاق إشارات الوقت الحقيقي المتاحة يختلف وفقاً لتنفيذ خيوط glibc (ويمكن أن يحدث هذا الاختلاف في وقت التشغيل وفقاً للنواة و glibc المتاحين)، وفي الواقع يختلف نطاق إشارات الوقت الحقيقي عبر أنظمة يونكس، فيجب على البرامج \fIألا تشير أبداً إلى إشارات الوقت الحقيقي باستخدام أرقام ثابتة\fP، وبدلاً من ذلك يجب دائماً الإشارة إليها باستخدام الصيغة \fBSIGRTMIN\fP+n، وتضمين فحوصات مناسبة (في وقت التشغيل) للتأكد من أن \fBSIGRTMIN\fP+n لا يتجاوز \fBSIGRTMAX\fP. .P خلافاً للإشارات القياسية، لا تملك إشارات الوقت الحقيقي معانٍ محددة مسبقاً: إذ يمكن استخدام كامل مجموعة إشارات الوقت الحقيقي لأغراض يحددها التطبيق. .P الإجراء المبدئي لإشارة وقت حقيقي غير معالجة هو إنهاء العملية المستلمة. .P تتميز إشارات الوقت الحقيقي بما يلي: .IP \[bu] 3 يمكن جدولة مثيلات متعددة من إشارات الوقت الحقيقي في طابور. وبالمقابل، إذا سُلمت مثيلات متعددة من إشارة قياسية بينما كانت تلك الإشارة محجوبة حالياً، فسيُجدول مثيل واحد فقط في الطابور. .IP \[bu] إذا أُرسلت الإشارة باستخدام \fBsigqueue\fP(3)، فيمكن إرسال قيمة مصاحبة (إما عدد صحيح أو مؤشر) مع الإشارة. إذا أنشأت العملية المستلمة معالجاً لهذه الإشارة باستخدام الراية \fBSA_SIGINFO\fP لـ \fBsigaction\fP(2)، فيمكنها الحصول على هذه البيانات عبر حقل \fIsi_value\fP في بنية \fIsiginfo_t\fP الممرة كمعامل ثانٍ للمعالج. علاوة على ذلك، يمكن استخدام حقول \fIsi_pid\fP و \fIsi_uid\fP في هذه البنية للحصول على معرف العملية (PID) ومعرف المستخدم الحقيقي للعملية المرسلة للإشارة. .IP \[bu] تُسلم إشارات الوقت الحقيقي بترتيب مضمون. إذ تُسلم مثيلات متعددة من إشارات الوقت الحقيقي من النوع نفسه بنفس ترتيب إرسالها. وإذا أُرسلت إشارات وقت حقيقي مختلفة إلى عملية ما، فتُسلم بدءاً من الإشارة ذات الرقم الأدنى. (أي أن الإشارات ذات الأرقام الدنيا لها الأولوية القصوى). وبالمقابل، إذا كانت هناك إشارات قياسية متعددة معلقة لعملية ما، فإن ترتيب تسليمها غير محدد. .P إذا كانت كل من الإشارات القياسية وإشارات الوقت الحقيقي معلقة لعملية ما، فإن POSIX يترك الأمر غير محدد بشأن أيهما يُسلم أولاً. يعطي لينكس، مثل العديد من التنفيذات الأخرى، الأولوية للإشارات القياسية في هذه الحالة. .P وفقاً لـ POSIX، يجب أن يسمح التنفيذ بوضع ما لا يقل عن \fB_POSIX_SIGQUEUE_MAX\fP (32) من إشارات الوقت الحقيقي في طابور لعملية ما. ومع ذلك، فإن لينكس يفعل ذلك بشكل مختلف. حتى الإصدار 2.6.7 من لينكس وما قبله، يفرض لينكس حداً على مستوى النظام لعدد إشارات الوقت الحقيقي المجدولة لجميع العمليات. يمكن عرض هذا الحد وتغييره (بامتيازات) عبر ملف \fI/proc/sys/kernel/rtsig\-max\fP. ويمكن استخدام ملف ذي صلة، وهو \fI/proc/sys/kernel/rtsig\-nr\fP، لمعرفة عدد إشارات الوقت الحقيقي المجدولة حالياً. في لينكس 2.6.8، استُبدلت واجهات \fI/proc\fP هذه بحد المورد \fBRLIMIT_SIGPENDING\fP، الذي يحدد حداً لكل مستخدم للإشارات المجدولة؛ انظر \fBsetrlimit\fP(2) لمزيد من التفاصيل. .P تطلبت إضافة إشارات الوقت الحقيقي توسيع بنية مجموعة الإشارات (\fIsigset_t\fP) من 32 إلى 64 بت. ونتيجة لذلك، استُبدلت استدعاءات نظام مختلفة باستدعاءات نظام جديدة تدعم مجموعات الإشارات الأكبر. استدعاءات النظام القديمة والجديدة هي كما يلي: .TS lb lb l l. لينكس 2.0 وما قبله لينكس 2.2 وما بعده \f[B]sigaction\fR(2) \f[B]rt_sigaction\fR(2) \f[B]sigpending\fR(2) \f[B]rt_sigpending\fR(2) \f[B]sigprocmask\fR(2) \f[B]rt_sigprocmask\fR(2) \f[B]sigreturn\fR(2) \f[B]rt_sigreturn\fR(2) \f[B]sigsuspend\fR(2) \f[B]rt_sigsuspend\fR(2) \f[B]sigtimedwait\fR(2) \f[B]rt_sigtimedwait\fR(2) .TE .\" .SS "مقاطعة استدعاءات النظام ودوال المكتبات بواسطة معالجات الإشارة" إذا استُدعي معالج إشارة بينما كان استدعاء نظام أو استدعاء دالة مكتبة محجوباً، فإما: .IP \[bu] 3 يُعاد تشغيل الاستدعاء آلياً بعد عودة معالج الإشارة؛ أو .IP \[bu] يفشل الاستدعاء مع الخطأ \fBEINTR\fP. .P يعتمد أي من هذين السلوكين سيحدث على الواجهة وما إذا كان قد أُنشئ معالج الإشارة باستخدام الراية \fBSA_RESTART\fP أم لا (انظر \fBsigaction\fP(2)). تختلف التفاصيل عبر أنظمة يونكس؛ وفيما يلي التفاصيل الخاصة بلينكس. .P .\" The following system calls use ERESTARTSYS, .\" so that they are restartable إذا قوطع استدعاء محجوب لإحدى الواجهات التالية بواسطة معالج إشارة، فسيُعاد تشغيل الاستدعاء آلياً بعد عودة معالج الإشارة إذا استُخدمت الراية \fBSA_RESTART\fP؛ وإلا فإن الاستدعاء يفشل مع الخطأ \fBEINTR\fP: .IP \[bu] 3 استدعاءات \fBread\fP(2) و \fBreadv\fP(2) و \fBwrite\fP(2) و \fBwritev\fP(2) و \fBioctl\fP(2) على الأجهزة "البطيئة". الجهاز "البطيء" هو الجهاز الذي قد يُحجب فيه استدعاء الإدخال/الإخراج لوقت غير محدد، مثل الطرفية أو الأنبوب أو المقبس. إذا كان استدعاء إدخال/إخراج على جهاز بطيء قد نقل بالفعل بعض البيانات بحلول الوقت الذي قوطع فيه بواسطة معالج إشارة، فسيعود الاستدعاء بحالة نجاح (عادةً، عدد البايتات المنقولة). لاحظ أن القرص (المحلي) ليس جهازاً بطيئاً وفقاً لهذا التعريف؛ فعمليات الإدخال/الإخراج على أجهزة الأقراص لا تقاطعها الإشارات. .IP \[bu] \fBopen\fP(2)، إذا كان من الممكن حجبه (على سبيل المثال، عند فتح FIFO؛ انظر \fBfifo\fP(7)). .IP \[bu] \fBwait\fP(2) و \fBwait3\fP(2) و \fBwait4\fP(2) و \fBwaitid\fP(2) و \fBwaitpid\fP(2). .IP \[bu] .\" If a timeout (setsockopt()) is in effect on the socket, then these .\" system calls switch to using EINTR. Consequently, they and are not .\" automatically restarted, and they show the stop/cont behavior .\" described below. (Verified from Linux 2.6.26 source, and by experiment; mtk) .\" FIXME What about sendmmsg()? واجهات المقبس: \fBaccept\fP(2) و \fBconnect\fP(2) و \fBrecv\fP(2) و \fBrecvfrom\fP(2) و \fBrecvmmsg\fP(2) و \fBrecvmsg\fP(2) و \fBsend\fP(2) و \fBsendto\fP(2) و \fBsendmsg\fP(2)، ما لم يُضبط مهلة على المقبس (انظر أدناه). .IP \[bu] واجهات قفل الملفات: \fBflock\fP(2) وعمليات \fBF_SETLKW\fP و \fBF_OFD_SETLKW\fP لـ \fBfcntl\fP(2) .IP \[bu] واجهات طابور رسائل POSIX: ‏\fBmq_receive\fP(3) و \fBmq_timedreceive\fP(3) و \fBmq_send\fP(3) و \fBmq_timedsend\fP(3). .IP \[bu] .\" commit 72c1bbf308c75a136803d2d76d0e18258be14c7a \fBfutex\fP(2) \fBFUTEX_WAIT\fP (منذ لينكس 2.6.22؛ قبل ذلك، كان يفشل دائماً مع \fBEINTR\fP). .IP \[bu] \fBgetrandom\fP(2). .IP \[bu] \fBfutex\fP(2) \fBFUTEX_WAIT_BITSET\fP. .IP \[bu] .\" as a consequence of the 2.6.22 changes in the futex() implementation واجهات إشارات POSIX: ‏\fBsem_wait\fP(3) و \fBsem_timedwait\fP(3) (منذ لينكس 2.6.22؛ قبل ذلك، كانت تفشل دائماً مع \fBEINTR\fP). .IP \[bu] .\" commit 1ca39ab9d21ac93f94b9e3eb364ea9a5cf2aba06 \fBread\fP(2) من واصف ملف \fBinotify\fP(7) (منذ لينكس 3.8؛ قبل ذلك، كان يفشل دائماً مع \fBEINTR\fP). .P .\" These are the system calls that give EINTR or ERESTARTNOHAND .\" on interruption by a signal handler. لا تُستأنف الواجهات التالية أبداً بعد مقاطعتها بواسطة معالج إشارة، بغض النظر عن استخدام \fBSA_RESTART\fP؛ فهي تفشل دائماً مع الخطأ \fBEINTR\fP عندما يقاطعها معالج إشارة: .IP \[bu] 3 واجهات مقابس "الإدخال"، عندما تُضبط مهلة (\fBSO_RCVTIMEO\fP) على المقبس باستخدام \fBsetsockopt\fP(2): \fBaccept\fP(2) و \fBrecv\fP(2) و \fBrecvfrom\fP(2) و \fBrecvmmsg\fP(2) (أيضاً مع معامل \fItimeout\fP غير صفري)، و \fBrecvmsg\fP(2). .IP \[bu] .\" FIXME What about sendmmsg()? واجهات مقابس "الإخراج"، عندما تُضبط مهلة (\fBSO_RCVTIMEO\fP) على المقبس باستخدام \fBsetsockopt\fP(2): \fBconnect\fP(2) و \fBsend\fP(2) و \fBsendto\fP(2) و \fBsendmsg\fP(2). .IP \[bu] الواجهات المستخدمة لانتظار الإشارات: \fBpause\fP(2) و \fBsigsuspend\fP(2) و \fBsigtimedwait\fP(2) و \fBsigwaitinfo\fP(2). .IP \[bu] واجهات مضاعفة واصف الملفات: \fBepoll_wait\fP(2) و \fBepoll_pwait\fP(2) و \fBpoll\fP(2) و \fBppoll\fP(2) و \fBselect\fP(2) و \fBpselect\fP(2). .IP \[bu] .\" On some other systems, SA_RESTART does restart these system calls واجهات System V IPC: ‏\fBmsgrcv\fP(2) و \fBmsgsnd\fP(2) و \fBsemop\fP(2) و \fBsemtimedop\fP(2). .IP \[bu] واجهات النوم: \fBclock_nanosleep\fP(2) و \fBnanosleep\fP(2) و \fBusleep\fP(3). .IP \[bu] \fBio_getevents\fP(2). .P لا تُستأنف دالة \fBsleep\fP(3) أبداً إذا قوطعت بواسطة معالج، ولكنها تعود بنجاح مع القيمة: عدد الثواني المتبقية للنوم. .P .\" في ظروف معينة، يمكن أن تؤدي ميزة إشعار مساحة المستخدم لـ \fBseccomp\fP(2) إلى إعادة تشغيل استدعاءات النظام التي لا تُستأنف عادةً بواسطة \fBSA_RESTART\fP؛ لمزيد من التفاصيل، انظر \fBseccomp_unotify\fP(2). .SS "مقاطعة استدعاءات النظام ودوال المكتبات بواسطة إشارات التوقف" في لينكس، حتى في غياب معالجات الإشارة، يمكن أن تفشل واجهات حجب معينة مع الخطأ \fBEINTR\fP بعد توقف العملية بواسطة إحدى إشارات التوقف ثم استئنافها عبر \fBSIGCONT\fP. هذا السلوك غير معتمد في POSIX.1، ولا يحدث في الأنظمة الأخرى. .P واجهات لينكس التي تظهر هذا السلوك هي: .IP \[bu] 3 واجهات مقابس "الإدخال"، عندما تُضبط مهلة (\fBSO_RCVTIMEO\fP) على المقبس باستخدام \fBsetsockopt\fP(2): \fBaccept\fP(2) و \fBrecv\fP(2) و \fBrecvfrom\fP(2) و \fBrecvmmsg\fP(2) (أيضاً مع معامل \fItimeout\fP غير صفري)، و \fBrecvmsg\fP(2). .IP \[bu] .\" FIXME What about sendmmsg()? واجهات مقابس "الإخراج"، عندما تُضبط مهلة (\fBSO_RCVTIMEO\fP) على المقبس باستخدام \fBsetsockopt\fP(2): \fBconnect\fP(2) و \fBsend\fP(2) و \fBsendto\fP(2) و \fBsendmsg\fP(2)، إذا ضُبطت مهلة إرسال (\fBSO_SNDTIMEO\fP). .IP \[bu] \fBepoll_wait\fP(2) و \fBepoll_pwait\fP(2). .IP \[bu] \fBsemop\fP(2) و \fBsemtimedop\fP(2). .IP \[bu] \fBsigtimedwait\fP(2) و \fBsigwaitinfo\fP(2). .IP \[bu] .\" commit 1ca39ab9d21ac93f94b9e3eb364ea9a5cf2aba06 لينكس 3.7 وما قبله: \fBread\fP(2) من واصف ملف \fBinotify\fP(7) .IP \[bu] لينكس 2.6.21 وما قبله: \fBfutex\fP(2) \fBFUTEX_WAIT\fP و \fBsem_timedwait\fP(3) و \fBsem_wait\fP(3). .IP \[bu] لينكس 2.6.8 وما قبله: \fBmsgrcv\fP(2) و \fBmsgsnd\fP(2). .IP \[bu] لينكس 2.4 وما قبله: \fBnanosleep\fP(2). .SH المعايير POSIX.1، ما لم يذكر خلاف ذلك. .SH ملاحظات لمناقشة الدوال الآمنة للإشارات غير المتزامنة، انظر \fBsignal\-safety\fP(7). .P يحتوي الملف \fI/proc/\fPpid\fI/task/\fPtid\fI/status\fP على حقول متنوعة توضح الإشارات التي يحجبها الخيط (\fISigBlk\fP)، أو يلتقطها (\fISigCgt\fP)، أو يتجاهلها (\fISigIgn\fP). (مجموعة الإشارات التي تُلتقط أو تُتجاهل ستكون هي نفسها عبر جميع خيوط العملية). تُظهر حقول أخرى مجموعة الإشارات المعلقة الموجهة إلى الخيط (\fISigPnd\fP) بالإضافة إلى مجموعة الإشارات المعلقة الموجهة إلى العملية ككل (\fIShdPnd\fP). تُظهر الحقول المقابلة في \fI/proc/\fPpid\fI/status\fP المعلومات الخاصة بالخيط الرئيس. انظر \fBproc\fP(5) لمزيد من التفاصيل. .SH العلل هناك ست إشارات يمكن إرسالها كنتيجة لاستثناء عتادي: \fBSIGBUS\fP و \fBSIGEMT\fP و \fBSIGFPE\fP و \fBSIGILL\fP و \fBSIGSEGV\fP و \fBSIGTRAP\fP. أي من هذه الإشارات يُسلم، لأي استثناء عتادي معين، ليس موثقاً ولا يبدو منطقياً دائماً. .P على سبيل المثال، قد يؤدي الوصول غير الصالح للذاكرة الذي يتسبب في إرسال \fBSIGSEGV\fP في معمارية معالج واحدة إلى إرسال \fBSIGBUS\fP في معمارية أخرى، أو العكس. .P ولمثال آخر، يؤدي استخدام تعليمة x86 \fIint\fP مع معامل ممنوع (أي رقم غير 3 أو 128) إلى إرسال \fBSIGSEGV\fP، على الرغم من أن \fBSIGILL\fP سيكون أكثر منطقية، وذلك بسبب كيفية إبلاغ المعالج عن العملية الممنوعة للنواة. .SH "انظر أيضًا" \fBkill\fP(1), \fBclone\fP(2), \fBgetrlimit\fP(2), \fBkill\fP(2), \fBpidfd_send_signal\fP(2), \fBrestart_syscall\fP(2), \fBrt_sigqueueinfo\fP(2), \fBsetitimer\fP(2), \fBsetrlimit\fP(2), \fBsgetmask\fP(2), \fBsigaction\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigreturn\fP(2), \fBsigsuspend\fP(2), \fBsigwaitinfo\fP(2), \fBabort\fP(3), \fBbsd_signal\fP(3), \fBkillpg\fP(3), \fBlongjmp\fP(3), \fBpthread_sigqueue\fP(3), \fBraise\fP(3), \fBsigqueue\fP(3), \fBsigset\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsigwait\fP(3), \fBstrsignal\fP(3), \fBswapcontext\fP(3), \fBsysv_signal\fP(3), \fBcore\fP(5), \fBproc\fP(5), \fBnptl\fP(7), \fBpthreads\fP(7), \fBsigevent\fP(3type) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .