إشارة - لينكس / قيادة يونكس

يدعم Linux كلا الإشارات الموثوقة POSIX (المشار إليها فيما بعد بـ "الإشارات القياسية") وإشارات POSIX في الوقت الفعلي.

الإشارات القياسية

يدعم Linux الإشارات القياسية المدرجة أدناه. تعتمد العديد من أرقام الإشارة على العمارة ، كما هو موضح في عمود "القيمة". (حيث يتم إعطاء ثلاث قيم ، يكون أولها عادة صالحًا لـ alpha و sparc ، والوسط لـ i386 ، و ppc ، و sh ، وآخر من أجل mips.

أ- يدل على أن الإشارة غير موجودة في البنية المقابلة.)

تحدد الإدخالات الموجودة في عمود "الإجراء" بالجدول الإجراء الافتراضي للإشارة ، كما يلي:

مصطلح

الإجراء الافتراضي هو إنهاء العملية.

IGN

الإجراء الافتراضي هو تجاهل الإشارة.

النواة

الإجراء الافتراضي هو إنهاء العملية وتفريغ الأساسية.

توقف

الإجراء الافتراضي هو إيقاف العملية.

أولاً الإشارات الموضحة في معيار POSIX.1 الأصلي.

إشارة القيمة عمل تعليق
أو موت عملية السيطرة
SIGINT 2 مصطلح مقاطعة من لوحة المفاتيح
SIGQUIT 3 النواة انسحب من لوحة المفاتيح
SIGILL 4 النواة تعليمات غير قانونية
SIGABRT 6 النواة إحباط الإشارة من الإجهاض (3)
SIGFPE 8 النواة استثناء نقطة عائمة
SIGKILL 9 مصطلح اقتل الإشارة
SIGSEGV 11 النواة مرجع ذاكرة غير صالح
SIGPIPE 13 مصطلح الأنبوب المكسور: الكتابة إلى الأنبوب بدون قارئات
SIGALRM 14 مصطلح إشارة توقيت من التنبيه (2)
SIGTERM 15 مصطلح إشارة الإنهاء
SIGUSR1 30،10،16 مصطلح إشارة المعرفة من قبل المستخدم 1
SIGUSR2 31،12،17 مصطلح إشارة المعرفة من قبل المستخدم 2
SIGCHLD 20،17،18 IGN توقف الطفل أو أنهى
SIGCONT 19،18،25 تواصل إذا توقفت
SIGSTOP 17،19،23 توقف عملية التوقف
SIGTSTP 18،20،24 توقف توقف عن الكتابة في tty
SIGTTIN 21،21،26 توقف مدخلات tty لعملية الخلفية
SIGTTOU 22،22،27 توقف الناتج tty لعملية الخلفية

لا يمكن اكتشاف الإشارات SIGKILL و SIGSTOP أو حظرها أو تجاهلها.

المقبل الإشارات ليست في معيار POSIX.1 ولكن وصفها في SUSV2 و SUSv3 / POSIX 1003.1-2001.

إشارة القيمة عمل تعليق
SIGPOLL مصطلح حدث قابل للطعن (Sys V). مرادف SIGIO
SIGPROF 27،27،29 مصطلح اختتام الموقت التنميط
SIGSYS 12 - 12 النواة حجة سيئة للروتين (SVID)
SIGTRAP 5 النواة تتبع / نقطة توقف الفخ
SIGURG 16،23،21 IGN حالة عاجلة على المقبس (4.2 BSD)
SIGVTALRM 26،26،28 مصطلح المنبه الظاهري (4.2 BSD)
SIGXCPU 24،24،30 النواة تجاوز حد وقت وحدة المعالجة المركزية (4.2 BSD)
SIGXFSZ 25،25،31 النواة تم تجاوز حد حجم الملف (4.2 BSD)

بما يصل إلى Linux 2.2 ، كان السلوك الافتراضي لـ SIGSYS و SIGXCPU و SIGXFSZ و (على أبنية أخرى غير SPARC و MIPS) SIGBUS هو إنهاء العملية (بدون تفريغ أساسي). (في بعض الاتحادات الأخرى ، يكون الإجراء الافتراضي لـ SIGXCPU و SIGXFSZ هو إنهاء العملية بدون تفريغ أساسي.) يتوافق Linux 2.4 مع متطلبات POSIX 1003.1-2001 لهذه الإشارات ، مما يؤدي إلى إنهاء العملية بملف أساسي.

القادم مختلف اشارات اخرى.

إشارة القيمة عمل تعليق
SIGEMT 7 - 7 مصطلح
SIGSTKFLT - (16 عاما) - مصطلح خطأ المكدس في المعالج الثانوي (غير مستخدمة)
SIGIO 23،29،22 مصطلح I / O ممكن الآن (4.2 BSD)
SIGCLD -، -، 18 IGN مرادف لـ SIGCHLD
SIGPWR 29،30،19 مصطلح انقطاع التيار الكهربائي (النظام الخامس)
SIGINFO 29، -، - مرادف ل SIGPWR
SIGLOST -، -، - مصطلح فقدت قفل الملف
SIGWINCH 28،28،20 IGN إشارة تغيير حجم النافذة (4.3 BSD ، Sun)
SIGUNUSED - (31 عاما) - مصطلح إشارة غير مستخدمة (سوف تكون SIGSYS)

(الإشارة 29 هي SIGINFO / SIGPWR على ألفا ولكن SIGLOST على sparc.)

لم يتم تحديد SIGEMT في POSIX 1003.1-2001 ، ولكن لا تظهر أبدًا على معظم Unices الأخرى ، حيث يكون الإجراء الافتراضي عادةً هو إنهاء العملية باستخدام تفريغ أساسي.

يتم عادةً تجاهل SIGPWR (الذي لم يتم تحديده في POSIX 1003.1-2001) بشكل افتراضي على تلك Unices الأخرى حيث تظهر.

يتم تجاهل SIGIO (غير المحدد في POSIX 1003.1-2001) بشكل افتراضي على عدة Unices أخرى.

إشارات الوقت الفعلي

يدعم Linux إشارات الوقت الفعلي كما تم تعريفها في الأصل في ملحقات الوقت الفعلي POSIX.4 (وهي الآن مضمنة في POSIX 1003.1-2001). يدعم Linux 32 إشارة في الوقت الحقيقي ، مرقمة من 32 ( SIGRTMIN ) إلى 63 ( SIGRTMAX ). (يجب أن تشير البرامج دائمًا إلى الإشارات في الوقت الفعلي باستخدام الترميز SIGRTMIN + n ، نظرًا لأن نطاق أرقام الإشارات في الوقت الفعلي يختلف عبر Unices.)

على عكس الإشارات القياسية ، لا تحتوي إشارات الوقت الفعلي على معان محددة مسبقًا: يمكن استخدام المجموعة الكاملة من الإشارات في الوقت الفعلي لأغراض محددة من قبل التطبيق. (لاحظ أن تطبيق LinuxThreads يستخدم الإشارات الثلاثة الأولى في الوقت الفعلي).

الإجراء الافتراضي لإشارة في الوقت الحقيقي غير معالج هو إنهاء عملية الاستلام.

تتميز إشارات الوقت الفعلي بما يلي:

  1. يمكن أن تنتظم عدة حالات من إشارات الوقت الفعلي. على النقيض من ذلك ، إذا تم تسليم عدة مثيلات للإشارة القياسية أثناء حظر هذه الإشارة حاليًا ، يتم وضع مثيل واحد فقط في قائمة الانتظار.
  2. إذا تم إرسال الإشارة باستخدام sigqueue (2) ، يمكن إرسال قيمة مصاحبة (إما عدد صحيح أو مؤشر) مع الإشارة. إذا قامت عملية الاستلام بإنشاء معالج لهذه الإشارة باستخدام إشارة SA_SIGACTION إلى sigaction (2) ، فيمكنها الحصول على هذه البيانات عبر حقل si_value الخاص بهيكل siginfo_t الذي تم تمريره كوسيطة ثانية إلى المعالج. علاوة على ذلك ، يمكن استخدام حقلي si_pid و si_uid في هذه البنية للحصول على معرف PID ومعرف المستخدم الحقيقي لعملية إرسال الإشارة.
  3. يتم تسليم الإشارات في الوقت الحقيقي في أمر مضمون. يتم تسليم إشارات متعددة في الوقت الفعلي من نفس النوع بالترتيب الذي تم إرسالها به. إذا تم إرسال إشارات مختلفة في الوقت الفعلي إلى عملية ، يتم تسليمها بدءًا من الإشارة ذات الأرقام الأقل. (أي أن الإشارات ذات الأرقام المنخفضة لها الأولوية القصوى.)

إذا كانت الإشارات القياسية وفي الوقت الفعلي معلقة في عملية ما ، فإن POSIX تتركها غير محددة ويتم تسليمها أولاً. يعطي Linux ، مثل العديد من التطبيقات الأخرى ، الأولوية للإشارات القياسية في هذه الحالة.

ووفقًا لـ POSIX ، يجب أن يسمح التنفيذ على الأقل بوضع إشارات في الوقت الفعلي بما يعادل _POSIX_SIGQUEUE_MAX (32) في قائمة الانتظار. ومع ذلك ، بدلاً من وضع حد لكل عملية ، يفرض Linux حدًا على مستوى النظام على عدد إشارات الوقت الفعلي في قائمة الانتظار لكل العمليات.

يمكن مشاهدة هذا الحد (ومع الامتياز) عن طريق ملف / proc / sys / kernel / rtsig-max . يمكن استخدام ملف ذي صلة ، / proc / sys / kernel / rtsig-max ، لمعرفة عدد الإشارات في الوقت الفعلي في قائمة الانتظار حاليًا.

التاكيد الى

POSIX.1

هام: استخدم الأمر man ( ٪ man ) لمعرفة كيفية استخدام أمر ما على جهاز الكمبيوتر الخاص بك.