صفحه اصلیسیگنال‌ها در سیستم‌های Unix/Linux

آیا می‌دانید سیگنال چیست؟

سیگنال‌ها وقفه‌های نرم‌افزاری هستند که به یک برنامه ارسال می‌شوند تا نشان دهند اتفاق مهمی رخ داده است. این رویدادها می‌توانند از درخواست‌های کاربر گرفته تا خطاهای دسترسی غیرمجاز به حافظه، متفاوت باشند. برخی سیگنال‌ها، مانند سیگنال SIGINT، نشان‌دهنده این است که کاربر از برنامه خواسته تا کاری را انجام دهد که در جریان معمول برنامه قرار ندارد.

سیگنال‌ها مکانیزمی برای پیام‌های آسنکرون یک‌طرفه هستند. ممکن است یک سیگنال از کرنل به یک پراسس، از یک پراسس به یک پراسس دیگر یا از یک پراسس به خودش فرستاده شود. سیگنال‌ها به طور معمول نسبت به برخی از رویدادها به یک پراسس هشدار می‌دهند، از جمله خطای دسترسی به قسمت غیرمجاز حافظه یا وقتی که کاربر کلیدهای Ctr+C را فشار می‌دهد.

کرنل لینوکس حدود 30 سیگنال را پیاده‌سازی کرده است. هر سیگنال توسط یک عدد از 1 تا 30 مشخص می‌شود. نام سیگنال‌ها هیچ استدلالی ندارد و اغلب توضیحی هستند. به عنوان مثال SIGKILL یا سیگنال شماره 9 به برنامه می‌گوید که کسی سعی دارد آن را بکشد.

کنترل عملیات سیگنال چگونه است؟

پراسس‌ها می‌توانند کنترل کنند که هنگام دریافت سیگنال‌ها چه عملیاتی انجام شود، به استثنای سیگنال‌های SIGKILL و SIGSTOP که همیشه پراسس را متوقف می‌کنند.

کنترل عملیات سیگنال به سه شکل می‌تواند انجام شود:

1. عمل پیش‌فرض انتخاب شود

هر سیگنال عملیات پیش‌فرض به خود را دارد که ممکن است خاتمه دادن به روند اجرای پراسس باشد.

3. سیگنال کنترل‌شده و عملیات خاصی انجام شود

پراسس به محض دریافت سیگنال به این عملکرد پرش می‌کند و بعد از اتمام، اجرای پراسس به مکان پرش منتقل می‌شود.

نکته: از واژه raise برای نشان دادن تولید سیگنال و از واژه catch برای نشان دادن دریافت سیگنال استفاده می‌شود.

2. سیگنال نادیده گرفته شود

در این‌صورت رخداد سیگنال هیچ‌گونه تاثیری بر عملکرد برنامه نخواهد داشت (رخداد سیگنال ساکت خواهد بود).

Signal_Programming

انواع سیگنال را بشناسیم

در جدول زیر انواع سیگنال‌ها به همراه نام و شماره آن‌ها ذکر شده است.

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)

با این دستور می‌توانیم هر سیگنالی را به هر پراسسی ارسال کنیم.

Signal_Programming

سیگنال و PVM

هسته سامانه PVM با زبان C++ و در محیط لینوکس توسعه یافته است. مدیریت سیگنال‌ها در برنامه‌نویسی بر پایه سیستم‌عامل لینوکس از چالش‌های جذاب و مهم محسوب می‌شود.

اصولا برنامه‌های بزرگ نیاز به آگاهی کامل و مدیریت درست سیگنال‌ها به جهت عملکرد دقیق و انطباق کامل با استانداردهای توسعه در لینوکس دارند که PVM نیز از این قاعده مستثنی نیست.

 

به اشتراک بگذارید.

بیشتر بخوانیم

مقالات مرتبط

1400-4-10 14:26:29 +00:00
Go to Top