الإشارة (IPC)
الإشارات عبارة عن رسائل موحدة تُرسل إلى برنامج قيد التشغيل لتحفيز سلوكيات محددة، مثل إنهاء البرنامج أو معالجة الأخطاء. وهي شكل محدود من أشكال الاتصال بين العمليات (IPC)، وتُستخدم عادةً في أنظمة يونكس ، والأنظمة الشبيهة بيونكس ، وأنظمة التشغيل الأخرى المتوافقة مع معيار POSIX .
الإشارة هي إشعار غير متزامن يُرسل إلى عملية أو إلى خيط محدد داخل نفس العملية لإعلامها بحدث ما. من الاستخدامات الشائعة للإشارات مقاطعة العمليات أو تعليقها أو إنهاؤها أو إيقافها . ظهرت الإشارات لأول مرة في مختبرات بيل في سبعينيات القرن الماضي في نظام يونكس، وتم تحديدها لاحقًا في معيار POSIX .
عند إرسال إشارة، يقوم نظام التشغيل بمقاطعة سير عمل العملية المستهدفة لتسليم الإشارة. يمكن مقاطعة التنفيذ أثناء أي تعليمة غير ذرية . إذا كانت العملية قد سجلت مسبقًا معالج إشارة ، فسيتم تنفيذ هذا المعالج. وإلا، فسيتم تنفيذ معالج الإشارة الافتراضي.
قد تجد البرامج المضمنة أن الإشارات مفيدة للاتصالات بين العمليات، حيث أن الإشارات تتميز بكفاءتها الخوارزمية .
تتشابه الإشارات مع المقاطعات ، والفرق هو أن المقاطعات تتم معالجتها بواسطة وحدة المعالجة المركزية (CPU) ويتولى نظام التشغيل (kernel) معالجتها ، بينما تتم معالجة الإشارات بواسطة نظام التشغيل (ربما عبر استدعاءات النظام) وتتولى كل عملية معالجة معالجتها . قد يمرر نظام التشغيل المقاطعة كإشارة إلى العملية التي تسببت بها (ومن الأمثلة الشائعة على ذلك SIGSEGV و SIGBUS و SIGILL و SIGFPE ).
تاريخ
- كان الإصدار الأول من نظام يونكس (1971) يحتوي على استدعاءات نظام منفصلة لالتقاط المقاطعات والخروج ومصائد الجهاز.
kill(أمر لإرسال إشارة، بشكل افتراضيSIGTERM) ظهر في الإصدار 2 (1972).- الإصدار 4 (1973) جمع كل الفخاخ في مكالمة واحدة، إشارة .
- كان الإصدار الخامس (1974) قادراً على إرسال إشارات عشوائية. [ 1 ]
- في الإصدار 7 (1979) تم إعطاء كل مصيدة مرقمة اسمًا رمزيًا.
- استبدلت الخطة 9 من مختبرات بيل (أواخر الثمانينيات) الإشارات بالنوتات الموسيقية ، مما يسمح بإرسال سلاسل قصيرة وعشوائية. [ 2 ]
إرسال الإشارات
يُرسل استدعاء النظام kill (2) إشارةً مُحددةً إلى عملية مُحددة، إذا سمحت الأذونات بذلك. وبالمثل، يسمح الأمر kill(1) للمستخدم بإرسال إشارات إلى العمليات. أما دالة المكتبة raise(3) فترسل الإشارة المُحددة إلى العملية الحالية.
ستؤدي الاستثناءات مثل القسمة على صفر ، وانتهاك تجزئة الذاكرة ( SIGSEGV )، واستثناء الفاصلة العائمة ( SIGFPE ) إلى حدوث تفريغ الذاكرة الأساسية وإنهاء البرنامج.
يمكن لنواة النظام توليد إشارات لإعلام العمليات بالأحداث. على سبيل المثال، سيتم توليد إشارة SIGPIPE عندما تكتب عملية ما إلى قناة تم إغلاقها بواسطة القارئ؛ افتراضيًا، يؤدي هذا إلى إنهاء العملية، وهو أمر مفيد عند إنشاء قنوات أوامر النظام .
يؤدي إدخال مجموعات مفاتيح معينة في الطرفية المتحكمة في عملية قيد التشغيل إلى إرسال النظام إشارات معينة إليها: [ 3 ]
- Ctrl-C (في أنظمة Unix القديمة، DEL) يرسل إشارة INT ("مقاطعة", SIGINT )؛ بشكل افتراضي، يتسبب هذا في إنهاء العملية.
- يرسل Ctrl-Z إشارة TSTP ("إيقاف طرفي، SIGTSTP ")؛ وبشكل افتراضي، يتسبب هذا في تعليق تنفيذ العملية. [ 4 ]
- Ctrl-\ يرسل إشارة إنهاء ( SIGQUIT )؛ بشكل افتراضي، يتسبب هذا في إنهاء العملية وتفريغ الذاكرة الأساسية.
- يرسل مفتاح Ctrl-T (غير مدعوم في جميع أنظمة UNIX) إشارة معلومات ( SIGINFO )؛ بشكل افتراضي، وإذا كان الأمر مدعومًا، فإن هذا يتسبب في عرض نظام التشغيل لمعلومات حول الأمر قيد التشغيل. [ 5 ]
يمكن تغيير مجموعات المفاتيح الافتراضية هذه مع أنظمة التشغيل الحديثة باستخدام أمر stty .
معالجة الإشارات
يمكن تثبيت معالجات الإشارات باستخدام استدعاء النظام signal(2) أو sigaction(2) . إذا لم يكن معالج إشارة مُثبّتًا لإشارة معينة، فسيتم استخدام المعالج الافتراضي. وإلا، فسيتم اعتراض الإشارة واستدعاء معالج الإشارة. يمكن للعملية أيضًا تحديد سلوكين افتراضيين، دون إنشاء معالج: تجاهل الإشارة ( SIG_IGN ) واستخدام معالج الإشارة الافتراضي ( SIG_DFL ). هناك إشارتان لا يمكن اعتراضهما أو معالجتهما: SIGKILL و SIGSTOP .
المخاطر
تُعد معالجة الإشارات عرضة لحالات التزامن . ولأن الإشارات غير متزامنة، فقد يتم إرسال إشارة أخرى (حتى من نفس النوع) إلى العملية أثناء تنفيذ روتين معالجة الإشارات.
يمكن استخدام استدعاء الدالة sigprocmask (2) لحظر وإلغاء حظر إرسال الإشارات. لا تُرسل الإشارات المحظورة إلى العملية إلا بعد إلغاء حظرها. أما الإشارات التي لا يمكن تجاهلها ( SIGKILL و SIGSTOP ) فلا يمكن حظرها.
يمكن أن تتسبب الإشارات في مقاطعة استدعاء النظام الجاري، مما يترك للتطبيق إدارة إعادة التشغيل غير الشفافة .
يجب كتابة معالجات الإشارات بطريقة لا تُسبب أي آثار جانبية غير مرغوب فيها، مثل تغيير قيمة errno ، أو تغيير قناع الإشارة، أو تغيير حالة الإشارة، أو أي تغييرات أخرى في سمات العملية العامة . كما أن استخدام الدوال غير القابلة لإعادة الدخول ، مثل malloc أو printf ، داخل معالجات الإشارات غير آمن. على وجه الخصوص، تشترط مواصفات POSIX وصفحة دليل Linux signal(7) أن تكون جميع دوال النظام التي يتم استدعاؤها بشكل مباشر أو غير مباشر من دالة إشارة آمنة من الإشارات غير المتزامنة . [ 6 ] [ 7 ] تُقدم صفحة دليل signal-safety(7) قائمة بدوال النظام الآمنة من الإشارات غير المتزامنة (عمليًا، استدعاءات النظام ). خلاف ذلك، يُعتبر سلوكًا غير مُعرّف . [ 8 ] يُقترح ببساطة تعيين متغير ما في معالج الإشارة، واختباره في مكان آخر. [ 9 ]volatile sig_atomic_t
يمكن لمعالجات الإشارات وضع الإشارة في قائمة انتظار والعودة فورًا. سيستمر الخيط الرئيسي بعد ذلك في العمل دون انقطاع حتى يتم استلام إشارات من قائمة الانتظار، كما هو الحال في حلقة الأحداث . تعني كلمة "دون انقطاع" هنا أن العمليات التي تُوقف التنفيذ قد تعود قبل الأوان ويجب استئنافها ، كما ذُكر سابقًا. يجب معالجة الإشارات من قائمة الانتظار على الخيط الرئيسي وليس بواسطة مجموعات العمال ، لأن ذلك يُعيد مشكلة عدم التزامن. مع ذلك، لا يُمكن إدارة قائمة انتظار بطريقة آمنة للإشارات غير المتزامنة باستخدام `async-signature` فقط sig_atomic_t، حيث أن عمليات القراءة والكتابة الفردية فقط لهذه المتغيرات هي التي تضمن أن تكون ذرية، وليست عمليات زيادة أو إنقاص (جلب و) كما هو مطلوب لقائمة الانتظار. وبالتالي، عمليًا، لا يُمكن وضع سوى إشارة واحدة لكل معالج في قائمة الانتظار بأمان sig_atomic_tحتى تتم معالجتها.
العلاقة مع استثناءات الأجهزة
قد يؤدي تنفيذ عملية ما إلى توليد استثناء متعلق بالأجهزة ، على سبيل المثال، إذا حاولت العملية القسمة على صفر أو تسببت في خطأ في الصفحة .
في أنظمة التشغيل الشبيهة بنظام يونكس ، يُغيّر هذا الحدث تلقائيًا سياق المعالج لبدء تنفيذ معالج استثناءات النواة . في حالة حدوث بعض الاستثناءات، مثل خطأ الصفحة ، تمتلك النواة معلومات كافية للتعامل مع الحدث بالكامل واستئناف تنفيذ العملية.
أما في حالات الاستثناءات الأخرى، فلا يستطيع نظام التشغيل معالجتها بكفاءة، بل يُحيل عملية معالجة الاستثناء إلى العملية المُسببة للخطأ. ويتم هذا الإحالة عبر آلية الإشارة، حيث يُرسل نظام التشغيل إلى العملية إشارةً تُناسب الاستثناء الحالي. على سبيل المثال، إذا حاولت عمليةٌ ما قسمة عدد صحيح على صفر على معالج x86 ، فسيتم توليد استثناء خطأ القسمة ، مما يدفع نظام التشغيل إلى إرسال إشارة SIGFPE إلى العملية.
وبالمثل، إذا حاولت العملية الوصول إلى عنوان ذاكرة خارج نطاق عناوينها الافتراضية ، فإن النواة ستُعلم العملية بهذا الانتهاك عبر إشارة انتهاك تجزئة الذاكرة ( SIGSEGV ). ومن الواضح أن الربط الدقيق بين أسماء الإشارات والاستثناءات يعتمد على وحدة المعالجة المركزية، نظرًا لاختلاف أنواع الاستثناءات بين البنى المختلفة.
إشارات POSIX
تُوثّق القائمة أدناه الإشارات المحددة في مواصفات يونكس الموحدة، الإصدار 5. تُعرَّف جميع الإشارات كثوابت ماكرو في <signal.h>ملف الرأس. يتكون اسم ثابت الماكرو من البادئة " SIG " متبوعةً باسم مختصر للإشارة.
يمكن للعملية تحديد كيفية التعامل مع إشارات POSIX الواردة . إذا لم تحدد العملية سلوكًا لإشارة ما، فسيتم استخدام المعالج الافتراضي لتلك الإشارة. يسرد الجدول أدناه بعض الإجراءات الافتراضية لأنظمة UNIX المتوافقة مع POSIX، مثل FreeBSD و OpenBSD و Linux .
| إشارة | رقم محمول | الإجراء الافتراضي | وصف |
|---|---|---|---|
SIGABRT | 6 | إنهاء العملية (تفريغ الذاكرة الأساسية) | إشارة إجهاض العملية |
SIGALRM | 14 | إنهاء | منبه |
SIGBUS | غير متوفر | إنهاء العملية (تفريغ الذاكرة الأساسية) | الوصول إلى جزء غير محدد من كائن الذاكرة |
SIGCHLD | غير متوفر | يتجاهل | تم إنهاء العملية الفرعية أو إيقافها أو استمرارها |
SIGCONT | غير متوفر | يكمل | استمر في التنفيذ، إذا تم إيقافه |
SIGFPE | 8 | إنهاء العملية (تفريغ الذاكرة الأساسية) | عملية حسابية خاطئة |
SIGHUP | 1 | إنهاء | يشنق |
SIGILL | 4 | إنهاء العملية (تفريغ الذاكرة الأساسية) | تعليمات غير قانونية |
SIGINT | 2 | إنهاء | إشارة مقاطعة طرفية |
SIGKILL | 9 | إنهاء | اقتل (لا يمكن الإمساك بك أو تجاهلك) |
SIGPIPE | 13 | إنهاء | اكتب على أنبوب دون أن يقرأه أحد |
SIGQUIT | 3 | إنهاء العملية (تفريغ الذاكرة الأساسية) | إشارة إنهاء المحطة الطرفية |
SIGSEGV | 11 | إنهاء العملية (تفريغ الذاكرة الأساسية) | مرجع ذاكرة غير صالح |
SIGSTOP | غير متوفر | قف | إيقاف التنفيذ (لا يمكن رصده أو تجاهله) |
SIGSYS | غير متوفر | إنهاء العملية (تفريغ الذاكرة الأساسية) | استدعاء نظام خاطئ |
SIGTERM | 15 | إنهاء | إشارة إنهاء |
SIGTRAP | 5 | إنهاء العملية (تفريغ الذاكرة الأساسية) | مصيدة التتبع/نقطة التوقف |
SIGTSTP | غير متوفر | قف | إشارة توقف المحطة |
SIGTTIN | غير متوفر | قف | عملية تجري في الخلفية تحاول القراءة |
SIGTTOU | غير متوفر | قف | عملية تجري في الخلفية تحاول الكتابة |
SIGUSR1 | غير متوفر | إنهاء | الإشارة 1 المُعرَّفة من قِبل المستخدم |
SIGUSR2 | غير متوفر | إنهاء | الإشارة 2 المُعرَّفة من قِبل المستخدم |
SIGURG | غير متوفر | يتجاهل | تتوفر البيانات خارج النطاق في المقبس |
SIGVTALRM | غير متوفر | إنهاء | انتهى المؤقت الافتراضي |
SIGXCPU | غير متوفر | إنهاء العملية (تفريغ الذاكرة الأساسية) | تجاوز الحد الزمني لوحدة المعالجة المركزية |
SIGXFSZ | غير متوفر | إنهاء العملية (تفريغ الذاكرة الأساسية) | تم تجاوز الحد الأقصى لحجم الملف |
SIGWINCH | غير متوفر | يتجاهل | تغيير حجم نافذة المحطة الطرفية |
- رقم الهاتف المحمول:
- بالنسبة لمعظم الإشارات، يتم تحديد رقم الإشارة المقابل من قِبل التنفيذ. يسرد هذا العمود الأرقام المحددة في معيار POSIX. [ 10 ]
- شرح الإجراءات:
- إنهاء – إنهاء غير طبيعي للعملية. يتم إنهاء العملية مع جميع عواقب الإنهاء غير الطبيعي باستثناء أن الحالة المتاحة تشير إلى إنهاء غير طبيعي بواسطة الإشارة المحددة.
_exit()wait()waitpid() - إنهاء (تفريغ الذاكرة الأساسية) – إنهاء غير طبيعي للعملية. بالإضافة إلى ذلك، قد تحدث إجراءات إنهاء غير طبيعية محددة من قِبل النظام، مثل إنشاء ملف الذاكرة الأساسية.
- تجاهل – تجاهل الإشارة.
- إيقاف – إيقاف (أو تعليق) العملية.
- متابعة – استمر في العملية إذا توقفت؛ وإلا، فتجاهل الإشارة.
- سيجابرت وسيجيوت
- تُرسل إشارة SIGABRT إلى عملية ما لإخبارها بالتوقف ، أي الإنهاء. عادةً ما تُطلق العملية هذه الإشارة بنفسها عند استدعاء دالة من مكتبة C القياسية ، ولكن يمكن إرسالها إلى العملية من خارجها كأي إشارة أخرى.
abort() - يشير SIGIOT إلى أن وحدة المعالجة المركزية قد نفذت تعليمات "مصيدة" صريحة (بدون وظيفة محددة)، أو تعليمات غير منفذة (عندما تكون المحاكاة غير متاحة).
- ملاحظة: يُعدّ مصطلح "مصيدة الإدخال/الإخراج" تسميةً غير دقيقة لأي تعليمة "مصيدة" في وحدة المعالجة المركزية. يعكس هذا المصطلح الاستخدام المبكر لهذه التعليمات، لا سيما لتنفيذ وظائف الإدخال/الإخراج، ولكنها ليست مرتبطة بالضرورة بإدخال/إخراج الجهاز، ويمكن استخدامها لأغراض أخرى مثل التواصل بين المضيفين الافتراضيين والحقيقيين.
- عادةً ما تكون إشارتي SIGIOT و SIGABRT متطابقتين، وقد يشير استلام تلك الإشارة إلى أي من الحالات المذكورة أعلاه.
- SIGALRM ،SIGVTALRM وSIGPROF
- تُرسل إشارات SIGALRM و SIGVTALRM و SIGPROF إلى العملية عند بلوغ الحد الزمني المقابل. تُحدد العملية هذه الحدود الزمنية باستدعاء دالة معينة. يعتمد الحد الزمني لإشارة SIGALRM على الوقت الفعلي أو وقت الساعة؛ بينما يعتمد الحد الزمني لإشارة SIGVTALRM على وقت وحدة المعالجة المركزية الذي تستخدمه العملية؛ أما إشارة SIGPROF فتعتمد على وقت وحدة المعالجة المركزية الذي تستخدمه العملية والنظام نيابةً عنها (المعروف بمؤقت التنميط ). في بعض الأنظمة، قد تُستخدم إشارة SIGALRM داخليًا بواسطة تنفيذ الدالة .
alarmsetitimersleep - سيغبوس
- تُرسل إشارة SIGBUS إلى العملية عندما تتسبب في حدوث خطأ في ناقل البيانات . ومن الأمثلة على الظروف التي تؤدي إلى إرسال هذه الإشارة: عدم محاذاة الوصول إلى الذاكرة بشكل صحيح أو عدم وجود عنوان فعلي .
- إشارة
- تُرسل إشارة SIGCHLD إلى عملية ما عند انتهاء عملية فرعية ، أو إيقافها، أو استئنافها بعد إيقافها. ومن الاستخدامات الشائعة لهذه الإشارة توجيه نظام التشغيل لتنظيف الموارد التي استخدمتها العملية الفرعية بعد انتهائها دون الحاجة إلى استدعاء صريح لوظيفة النظام.
wait - سيجكونت
- تُوجّه إشارة SIGCONT نظام التشغيل لاستئناف (إعادة تشغيل) عملية تم إيقافها مؤقتًا بواسطة إشارة SIGSTOP أو SIGTSTP . ومن أهم استخدامات هذه الإشارة التحكم في العمليات في واجهة سطر أوامر يونكس .
- SIGFPE
- تُرسل إشارة SIGFPE إلى العملية عند اكتشاف حالة استثنائية (وإن لم تكن بالضرورة خاطئة) في وحدة الحساب ذات الفاصلة العائمة أو الصحيحة. قد تشمل هذه الحالات القسمة على صفر ، أو تجاوز الحد الأدنى أو الأقصى للفاصلة العائمة، أو تجاوز الحد الأقصى للأعداد الصحيحة ، أو عملية غير صالحة، أو حساب غير دقيق. قد يختلف سلوك هذه الإشارة باختلاف نوع الجهاز.
- التسجيل
- تُرسل إشارة SIGHUP إلى العملية عند إغلاق طرفية التحكم الخاصة بها. صُممت هذه الإشارة في الأصل لإعلام العملية بانقطاع خط الاتصال التسلسلي ( انقطاع الاتصال ). في الأنظمة الحديثة، تعني هذه الإشارة عادةً إغلاق طرفية التحكم الوهمية أو الافتراضية . [ 11 ] تفسر العديد من البرامج الخفية (التي لا تملك طرفية تحكم) استلام هذه الإشارة على أنه طلب لإعادة تحميل ملفات التكوين الخاصة بها ومسح/إعادة فتح ملفات السجل بدلاً من الخروج. [ 12 ] يُستخدم الأمر nohup لتجاهل الإشارة.
- ختم
- يتم إرسال إشارة SIGILL إلى عملية ما عندما تحاول تنفيذ تعليمات غير قانونية أو مشوهة أو غير معروفة أو ذات امتيازات خاصة .
- الاستخبارات الإلكترونية
- تُرسل إشارة SIGINT إلى العملية من طرفية التحكم الخاصة بها عندما يرغب المستخدم في مقاطعة العملية . ويتم ذلك عادةً بالضغط على زر + ، ولكن في بعض الأنظمة، يمكن استخدام حرف " حذف " أو مفتاح " إيقاف ". [ 13 ]CtrlC
- سيجكيل
- تُرسل إشارة SIGKILL إلى عملية ما لإنهاءها فورًا ( kill ). على عكس إشارتي SIGTERM و SIGINT ، لا يمكن اعتراض هذه الإشارة أو تجاهلها، ولا يمكن للعملية المستقبلة إجراء أي تنظيف بعد استلامها. تُطبق الاستثناءات التالية:
- لا يمكن قتل العمليات الزومبية لأنها ميتة بالفعل وتنتظر أن تقوم العمليات الأصلية بحصدها.
- لن تموت العمليات التي تكون في حالة الحظر حتى تستيقظ مرة أخرى.
- تتميز عملية التهيئة (init) بخصوصية : فهي لا تتلقى إشارات لا ترغب في معالجتها، وبالتالي يمكنها تجاهل إشارة SIGKILL. [ 14 ] ويُستثنى من هذه القاعدة حالة تتبع عملية التهيئة (init) باستخدام ptraced على نظام لينكس. [ 15 ] [ 16 ]
- قد لا تنتهي عمليةٌ في حالة سكونٍ دائم (وتُحرر مواردها) حتى عند إرسال إشارة SIGKILL إليها . هذه إحدى الحالات النادرة التي قد يتطلب فيها نظام يونكس إعادة تشغيله لحل مشكلة برمجية مؤقتة.
- يُستخدم أمر SIGKILL كحل أخير لإنهاء العمليات في معظم إجراءات إيقاف تشغيل النظام إذا لم يتم الخروج تلقائيًا استجابةً لأمر SIGTERM . ولتسريع عملية إيقاف تشغيل الكمبيوتر، يقوم نظام التشغيل Mac OS X 10.6، المعروف أيضًا باسم Snow Leopard ، بإرسال إشارة SIGKILL إلى التطبيقات التي حددت نفسها بأنها "نظيفة"، مما يؤدي إلى إيقاف تشغيل أسرع، على الأرجح دون أي آثار سلبية. [ 17 ] وللأمر تأثير مشابه، وإن كان خطيرًا، عند تنفيذه في أنظمة مثل Linux؛ فهو يمنع البرامج من حفظ البيانات غير المحفوظة. وله خيارات أخرى، وفي حال عدم وجود أي منها، يستخدم إشارة SIGTERM الأكثر أمانًا.
killall -9 - أنبوب سيج
- يتم إرسال إشارة SIGPIPE إلى عملية ما عندما تحاول الكتابة إلى قناة بدون وجود عملية متصلة بالطرف الآخر.
- استطلاع رأي
- تُرسَل إشارة SIGPOLL عند وقوع حدث على مُعرِّف ملف مُراقَب صراحةً. [ 18 ] يؤدي استخدامها فعليًا إلى إجراء طلبات إدخال/إخراج غير متزامنة، حيث يقوم نظام التشغيل باستطلاع المُعرِّف بدلًا من المُستدعي. وهي تُوفِّر بديلًا للاستطلاع النشط .
- SIGRTMIN إلىسيغرت ماكس
- تُستخدم إشارات SIGRTMIN إلى SIGRTMAX لأغراض يحددها المستخدم. وهي إشارات تعمل في الوقت الحقيقي .
- إشارة الخروج
- يتم إرسال إشارة SIGQUIT إلى العملية بواسطة طرفية التحكم الخاصة بها عندما يطلب المستخدم من العملية إنهاء العملية وإجراء عملية تفريغ الذاكرة الأساسية .
- SIGSEGV
- يتم إرسال إشارة SIGSEGV إلى عملية ما عندما تقوم بمرجع غير صالح للذاكرة الافتراضية، أو خطأ في تجزئة الذاكرة ، أي عندما تقوم بانتهاك تجزئة الذاكرة . [ 19 ]
- إشارة التوقف
- تُعلم إشارة SIGSTOP نظام التشغيل بإيقاف عملية ما لاستئنافها لاحقاً .
- سيجسيس
- تُرسَل إشارة SIGSYS إلى عملية ما عندما تُمرِّر وسيطًا غير صالح إلى استدعاء نظام . عمليًا، نادرًا ما يُصادف هذا النوع من الإشارات لأن التطبيقات تعتمد على المكتبات (مثل libc ) لإجراء الاستدعاء نيابةً عنها. قد تستقبل التطبيقات التي تنتهك قواعد أمان Linux Seccomp المُهيأة لتقييدها إشارة SIGSYS. كما يُمكن استخدام SIGSYS لمحاكاة استدعاءات النظام الخارجية، مثل محاكاة استدعاءات نظام Windows على Linux. [ 20 ]
- سيج تيرم
- تُرسل إشارة SIGTERM إلى عملية ما لطلب إنهائها . على عكس إشارة SIGKILL ، يمكن للعملية التقاطها وتفسيرها أو تجاهلها. وهذا يسمح للعملية بإنهاء سلس، مع تحرير الموارد وحفظ الحالة عند الاقتضاء. إشارة SIGINT مطابقة تقريبًا لإشارة SIGTERM .
- SIGTSTP
- تُرسل إشارة SIGTSTP إلى العملية من طرفية التحكم الخاصة بها لطلب إيقافها ( إيقاف الطرفية ) . ويتم تفعيلها عادةً عن طريق ضغط المستخدم على زر + . على عكس إشارة SIGSTOP ، يمكن للعملية تسجيل معالج إشارة لها أو تجاهلها.CtrlZ
- SIGTTIN وسيجتو
- تُرسل إشارتا SIGTTIN و SIGTTOU إلى العملية عندما تحاول القراءة أو الكتابة من طرفية tty أثناء عملها في الخلفية . عادةً، لا تستقبل هذه الإشارات إلا العمليات الخاضعة للتحكم ؛ أما البرامج الخفية فلا تملك أطراف تحكم، وبالتالي لا ينبغي أن تستقبل هذه الإشارات أبدًا.
- سيغتراپ
- يتم إرسال إشارة SIGTRAP إلى عملية ما عند حدوث استثناء (أو مصيدة ) : وهي حالة طلب مصحح الأخطاء إبلاغه بها - على سبيل المثال، عند تنفيذ دالة معينة ، أو عند تغيير قيمة متغير معين.
- سيجورج
- يتم إرسال إشارة SIGURG إلى عملية ما عندما يكون لدى مقبس بيانات عاجلة أو خارج النطاق متاحة للقراءة.
- SIGUSR1 وSIGUSR2
- يتم إرسال الإشارتين SIGUSR1 و SIGUSR2 إلى عملية ما للإشارة إلى الشروط التي يحددها المستخدم .
- SIGXCPU
- تُرسل إشارة SIGXCPU إلى عملية ما عندما تستنفد موارد وحدة المعالجة المركزية لفترة تتجاوز قيمة محددة مسبقًا يمكن للمستخدم ضبطها. [ 21 ] يتيح وصول إشارة SIGXCPU للعملية المستقبلة فرصة لحفظ أي نتائج وسيطة بسرعة والخروج بسلاسة، قبل أن يقوم نظام التشغيل بإنهاء العملية باستخدام إشارة SIGKILL .
- SIGXFSZ
- يتم إرسال إشارة SIGXFSZ إلى عملية ما عندما يتجاوز حجم ملف الحد الأقصى المسموح به .
- سيجوينش
- يتم إرسال إشارة SIGWINCH إلى عملية ما عندما يتغير حجم طرفية التحكم الخاصة بها ( تغيير النافذة ) . [ 22 ]
إشارات متنوعة
الإشارات التالية غير محددة في مواصفات POSIX . ومع ذلك، يتم استخدامها أحيانًا في أنظمة مختلفة.
- سيجمت
- تُرسل إشارة SIGEMT إلى عملية ما عند حدوث خلل في المحاكي . في حين أن المحاكي عادةً ما يعني برنامجًا يُنفذ برامج أخرى، إلا أنه في هذه الحالة يعني برنامجًا نفّذ تعليمات استدعاء المشرف (كانت EMT هي التعليمات المُستخدمة لهذا الغرض في سلسلة حواسيب DEC PDP-11 ).
- معلومات التوقيع
- يتم إرسال إشارة SIGINFO إلى عملية ما عند استلام طلب حالة ( معلومات ) من الجهاز الطرفي المتحكم.
- SIGPWR
- يتم إرسال إشارة SIGPWR إلى عملية ما عندما يتعرض النظام لانقطاع التيار الكهربائي .
- سيجلوست
- يتم إرسال إشارة SIGLOST إلى عملية ما عند فقدان قفل الملف .
- SIGSTKFLT
- تُرسل إشارة SIGSTKFLT إلى العملية عندما يواجه المعالج المساعد خطأً في مكدس الذاكرة ( أي سحب عنصر من المكدس عندما يكون فارغًا أو دفع عنصر إليه عندما يكون ممتلئًا). [ 23 ] وهي مُعرّفة في نظام لينكس، ولكنها غير مُستخدمة فيه، حيث يُولّد خطأ مكدس الذاكرة في معالج x87 المساعد إشارة SIGFPE بدلاً من ذلك. [ 24 ]
- تم استخدام الإشارة
- تُرسل إشارة SIGUNUSED إلى العملية عند إجراء استدعاء نظام برقم استدعاء نظام غير مستخدم . وهي مرادفة لإشارة SIGSYS في معظم البنى المعمارية. [ 23 ]
- SIGCLD
- إشارة SIGCLD مرادفة لـ SIGCHLD . [ 23 ]
انظر أيضاً
مراجع
- ↑ ماكيلروي، دكتور في الطب (1987). قارئ أبحاث يونكس: مقتطفات مشروحة من دليل المبرمج، 1971-1986 (ملف PDF) (تقرير فني). مختبرات بيل. 139.
- ↑ غالياردي، بيترو. "برمجة لغة C في Plan 9 من مختبرات بيل" . doc.cat-v.org . تم الاطلاع عليه بتاريخ 22 يناير 2022 .
- ↑ "إشارات الإنهاء" . مكتبة GNU C) .
- ↑ "إشارات التحكم في الوظائف" . مكتبة GNU C.
- ↑ "إشارات متنوعة" . مكتبة GNU C.
- ↑ "مواصفات المجموعة المفتوحة الأساسية، الإصدار 6، معيار IEEE 1003.1، إصدار 2004: واجهات النظام، الفصل 2" . pubs.opengroup.org . تم الاطلاع عليه بتاريخ 20 ديسمبر 2020 .
- ↑ "signal(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 20 ديسمبر 2020 .
- ↑ "signal-safety(7) - صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 20 ديسمبر 2020 .
- ↑ "المواصفات الأساسية لمجموعة Open Group، الإصدار 6، معيار IEEE 1003.1، إصدار 2004: <signal.h>" . pubs.opengroup.org . تم الاطلاع عليه بتاريخ 20 ديسمبر 2020 .
- ↑ "IEEE Std 1003.1-2017 - kill" . IEEE، Open Group.
يوضح الجدول التالي
العلاقة بين القيم العددية وقيمة
الإشارة المستخدمة. لا يمكن تحديد تأثير تحديد أي
رقم إشارة
آخر غير الأرقام المذكورة أدناه.
- ↑ مايكل كيريسك (25 يوليو 2009). "signal(7)" . دليل مبرمج لينكس (الإصدار 3.22) . أرشيف نواة لينكس . تم الاطلاع عليه في 23 سبتمبر 2009 .
- ↑ "perlipc(1)" . دليل مرجعي لمبرمجي بيرل، الإصدار 5.18 . perldoc.perl.org - الوثائق الرسمية للغة برمجة بيرل . تم الاطلاع عليه بتاريخ 21 سبتمبر 2013 .
- ↑ "التعامل السليم مع إشارات الاستخبارات الإلكترونية (SIGINT) وإشارات إنهاء الخدمة (SIGQUIT)" . تم الاطلاع عليه بتاريخ 6 أكتوبر 2012 .
- ↑ https://manpages.ubuntu.com/manpages/zesty/man2/kill.2.html مؤرشف بتاريخ ٢٨ يناير ٢٠١٨ في قسم الملاحظات على موقع Wayback Machine
- ↑ "SIGKILL init process (PID 1)" . Stack Overflow .
- ↑ "هل يمكن للمستخدم الجذر إنهاء عملية init؟" . موقع Unix & Linux Stack Exchange .
- ↑ "مركز مطوري ماك: ما الجديد في نظام التشغيل ماك أو إس إكس: ماك أو إس إكس الإصدار 10.6" . 28 أغسطس 2009. تم الاطلاع عليه بتاريخ 18 نوفمبر 2017 .
- ↑ "ioctl - يتحكم بجهاز STREAM" . مواصفات استدعاء النظام POSIX . مجموعة Open Group . تم الاطلاع عليه بتاريخ 19 يونيو 2015 .
- ↑ "ما هو "انتهاك التجزئة"؟" . support.microfocus.com . تم الاطلاع عليه بتاريخ 22 نوفمبر 2018 .
- ↑ "Syscall User Dispatch – The Linux Kernel documentation" . kernel.org . تم الاطلاع عليه بتاريخ 11 فبراير 2021 .
- ↑ "getrlimit، setrlimit - التحكم في الحد الأقصى لاستهلاك الموارد" . مواصفات استدعاءات نظام POSIX . مجموعة Open Group . تم الاطلاع عليه بتاريخ 10 سبتمبر 2009 .
- ↑ كلاوسيكر، روبرت (19 يونيو 2017). "0001151: تقديم إشارة SIGWINCH جديدة ووظيفتي tcsetsize() وtcgetsize() للحصول على/ضبط حجم نافذة الطرفية" . متتبع عيوب مجموعة أوستن . مجموعة أوستن . تم الاسترجاع في 12 أكتوبر 2017.
مقبول كما هو مُحدد
. - 1 2 3 "signal(7) — صفحات دليل لينكس" . manpages.courier-mta.org . تم الاطلاع عليه بتاريخ 22 نوفمبر 2018 .
- ↑ "Linux 3.0 x86_64: متى يتم رفع إشارة SIGSTKFLT؟" . Stack Overflow .
- ستيفنز، دبليو. ريتشارد (1992). البرمجة المتقدمة في بيئة يونكس® . ريدينغ، ماساتشوستس: أديسون ويسلي. ISBN 0-201-56317-7.
- "المواصفات الأساسية لمجموعة Open Group، الإصدار 8، معيار IEEE 1003.1™ - إصدار 2024" . مجموعة Open Group . تم الاطلاع عليه بتاريخ 2 مارس 2025 .
روابط خارجية
- جدول إشارات يونكس، علي العنجاوي، جامعة بيتسبرغ
- صفحة دليل الإشارة على موقع Man7.org
- مقدمة في برمجة إشارات يونكس ( مقدمة في آلة Wayback Machine ، مؤرشفة في 26 سبتمبر 2013)
- مقدمة أخرى لبرمجة إشارات يونكس (منشور مدونة، 2009)
- نظام يونكس وإشارات بوسيكس الموثوقة، بقلم باريس سيمسيك (محفوظة لدى أرشيف الإنترنت )
- معالجو الإشارات بقلم هينينغ براور
- التواصل بين العمليات
- تدفق التحكم
