ارسال و به دام انداختن سیگنالها
محتویات
سیگنالها ابزار اصلی برای ارتباطات میانپردازشی غیر همزمان میباشند. یعنی یک پردازش (A) میتواند به پردازش دیگر (B) بگوید در یک زمانی که به جای پردازش B توسط پردازش A انتخاب شده، کاری را انجام بدهد. (مانند جستجوی یک فایل توسط پردازش B هر چند ثانیه یکبار، این عمل polling نامیده میشود و زمانبندی آن به جای پردازش A توسط پردازش B کنترل میشود.)
سیستم عامل تعداد محدودی سیگنال فراهم مینماید که میتوانند برای گفتن انجام کاری به یک پردازش ارسال بشوند. سیگنالها هیچ اطلاعات اضافی را حمل نمیکنند، تنها اطلاعاتی که پردازش به دست میآورد آن است که سیگنال دریافت شده است. پردازش حتی نمیداند که چه کسی سیگنال را ارسال نموده.
غیر از اینکه پردازش از قبل فرمان خاصی بگیرد، اکثر سیگنالها کُشنده هستند، یعنی عمل پیشفرضی که یک پردازش به مجرد دریافت یک سیگنال انجام خواهد داد، یک خروج بیدرنگ است. (استثناها: SIGCHLD به طور پیشفرض صرفنظر میگردد، SIGSTOP پردازش را متوقف میسازد، و SIGCONT پردازش را از سر میگیرد.) برخی سیگنالها (از قبیل SIGQUIT) نیز باعث میشوند پردازش علاوه بر خروج یک فایل core باقی بگذارد.
1. تلهها، یا ادارهکنندگان سیگنال
یک پردازش ممکن است به جای خروج بواسطه دریافت یک سیگنال، انجام عمل متفاوتی را انتخاب کند. این عمل توسط تنظیم یک گرداننده سیگنال (یا trap) انجام میشود. trap باید قبل از اینکه سیگنال دریافت شود تنظیم شده باشد. وقتی پردازش بواسطه اینکه یک trap برای آن تنظیم شده است یک سیگنال دریافت میکند، گفته میشود سیگنال را در تله انداخته است.
سادهترین کاری که برای انجام دادن با یک پردازش میتواند انتخاب شود، نادیده گرفتن سیگنال است. قاعدتاً یک ایده نامناسب است، مگر اینکه برای یک مقصود خیلی خاص انجام گردد. صرفنظر نمودن از سیگنالها غالباً منجر به پردازشهای فراری میگردد که تمام قدرت CPU را مصرف میکنند.
به طور عمومیتر trapها میتوانند برای جلوگیری کردن از یک سیگنال کُشنده، انجام پاکسازی، و سپس خروج موقرانه تنظیم گردند. برای مثال، برنامهای که فایلهای موقتی ایجاد میکند و مایل است قبل از خروج آنها را حذف نماید. اگر برنامه توسط یک سیگنال مجبور به خروج بشود، قادر نخواهد شد فایلها را حذف کند مگر اینکه سیگنال را در تله بیاندازد.
در یک اسکریپت پوسته، trap فرمان مورد استفاده برای برقرار کردن یک گرداننده سیگنال است. فرمان trap به پنج روش مختلف میتواند استفاده شود:
ادامه مطلب