فهرست عناوین
آیا میدانید سیگنال چیست؟
سیگنالها وقفههای نرمافزاری هستند که به یک برنامه ارسال میشوند تا نشان دهند اتفاق مهمی رخ داده است. این رویدادها میتوانند از درخواستهای کاربر گرفته تا خطاهای دسترسی غیرمجاز به حافظه، متفاوت باشند. برخی سیگنالها، مانند سیگنال SIGINT، نشاندهنده این است که کاربر از برنامه خواسته تا کاری را انجام دهد که در جریان معمول برنامه قرار ندارد.
سیگنالها مکانیزمی برای پیامهای آسنکرون یکطرفه هستند. ممکن است یک سیگنال از کرنل به یک پراسس، از یک پراسس به یک پراسس دیگر یا از یک پراسس به خودش فرستاده شود. سیگنالها به طور معمول نسبت به برخی از رویدادها به یک پراسس هشدار میدهند، از جمله خطای دسترسی به قسمت غیرمجاز حافظه یا وقتی که کاربر کلیدهای Ctr+C را فشار میدهد.
کرنل لینوکس حدود 30 سیگنال را پیادهسازی کرده است. هر سیگنال توسط یک عدد از 1 تا 30 مشخص میشود. نام سیگنالها هیچ استدلالی ندارد و اغلب توضیحی هستند. به عنوان مثال SIGKILL یا سیگنال شماره 9 به برنامه میگوید که کسی سعی دارد آن را بکشد.
کنترل عملیات سیگنال چگونه است؟
پراسسها میتوانند کنترل کنند که هنگام دریافت سیگنالها چه عملیاتی انجام شود، به استثنای سیگنالهای SIGKILL و SIGSTOP که همیشه پراسس را متوقف میکنند.
کنترل عملیات سیگنال به سه شکل میتواند انجام شود:
1. عمل پیشفرض انتخاب شود
هر سیگنال عملیات پیشفرض به خود را دارد که ممکن است خاتمه دادن به روند اجرای پراسس باشد.
3. سیگنال کنترلشده و عملیات خاصی انجام شود
پراسس به محض دریافت سیگنال به این عملکرد پرش میکند و بعد از اتمام، اجرای پراسس به مکان پرش منتقل میشود.
نکته: از واژه raise برای نشان دادن تولید سیگنال و از واژه catch برای نشان دادن دریافت سیگنال استفاده میشود.
انواع سیگنال را بشناسیم
در جدول زیر انواع سیگنالها به همراه نام و شماره آنها ذکر شده است.
Description | Signal ID | Signal Name |
---|---|---|
Hangup (POSIX) | 1 | SIGHUP |
Terminal interrupt (ANSI) | 2 | SIGINT |
Terminal quit (POSIX) | 3 | SIGQUIT |
Illegal instruction (ANSI) | 4 | SIGILL |
Trace trap (POSIX) | 5 | SIGTRAP |
IOT Trap (4.2 BSD) | 6 | SIGIOT |
BUS error (4.2 BSD) | 7 | SIGBUS |
Floating point exception (ANSI) | 8 | SIGFPE |
Kill (can’t be caught or ignored) (POSIX) | 9 | SIGKILL |
User defined signal 1 (POSIX) | 10 | SIGUSR1 |
Description | Signal ID | Signal Name |
---|---|---|
Invalid memory segment access (ANSI) | 11 | SIGSEGV |
User defined signal 2 (POSIX) | 12 | SIGUSR2 |
Write on a pipe with no reader, Broken pipe (POSIX) | 13 | SIGPIPE |
Alarm clock (POSIX) | 14 | SIGALRM |
Termination (ANSI) | 15 | SIGTERM |
Stack fault | 16 | SIGSTKFLT |
Child process has stopped or exited, changed (POSIX) | 17 | SIGCHLD |
Continue executing, if stopped (POSIX) | 18 | SIGCONT |
Stop executing (can’t be caught or ignored) (POSIX) | 19 | SIFSTOP |
Terminal stop signal (POSIX) | 20 | SIGSTP |
Description | Signal ID | Signal Name |
---|---|---|
Background process trying to read, from TTY (POSIX) | 21 | SIGTTIN |
Background process trying to write, to TTY (POSIX) | 22 | SIGTTOU |
Urgent condition on socket (4.2 BSD) | 23 | SIGURG |
CPU limit exceeded (4.2 BSD) | 24 | SIGXCPU |
File size limit exceeded (4.2 BSD) | 25 | SIGXFSZ |
Virtual alarm clock (4.2 BSD) | 26 | SIGVTALRM |
Profiling alarm clock (4.2 BSD) | 27 | SIGPROF |
Window size change (4.3 BSD, Sun) | 28 | SIGWINCH |
I/O now possible (4.2 BSD) | 29 | SIGIO |
Power failure restart (System V) | 30 | SIGPWR |
ارسال سیگنال چگونه است؟
سیگنالها در شرایط خطا توسط Shell و Terminal Handler ایجاد میشوند تا باعث ایجاد وقفه شوند و همچنین میتوانند از یک فرآیند به فرآیند دیگر ارسال شوند تا اطلاعات را منتقل یا باعث اصلاح رفتار شوند.
دستور kill برای ارسال سیگنال به پراسسها استفاده میشود. این نامگذاری از این جهت است که رفتار اکثر سیگنالها خاتمه برنامه است.
Kill –(SignalID or SignalName) –(ProcessID)
با این دستور میتوانیم هر سیگنالی را به هر پراسسی ارسال کنیم.
سیگنال و PVM
هسته سامانه PVM با زبان C++ و در محیط لینوکس توسعه یافته است. مدیریت سیگنالها در برنامهنویسی بر پایه سیستمعامل لینوکس از چالشهای جذاب و مهم محسوب میشود.
اصولا برنامههای بزرگ نیاز به آگاهی کامل و مدیریت درست سیگنالها به جهت عملکرد دقیق و انطباق کامل با استانداردهای توسعه در لینوکس دارند که PVM نیز از این قاعده مستثنی نیست.
ثبت ديدگاه