در درس قبل، ما به برخی ضرورتهای جانبیِ چند کاربری بودن لینوکس نگاه کردیم. در این درس، ماهیت چند وظیفهای لینوکس و چگونگی اداره کردن آن با رابط خط فرمان را رسیدگی میکنیم.
مانند هر سیستم عامل چند وظیفهای، لینوکس چندین پردازش همزمان را اجرا میکند. خُب، به هر حال آنها به ظاهر همزمان هستند. در عمل، یک پردازشگر منفرد کامپیوتر تنها میتواند یک پردازش را در یک زمان اجرا کند اما هسته لینوکس نوبتدهی به هر پردازش در پردازشگر را مدیریت میکند و به نظر میآید که در یک زمان در حال اجرا شدن هستند.
چند فرمان وجود دارد که میتوانند برای کنترل پردازشها به کار بروند. آنها عبارتند از:
در حالیکه ممکن است به نظر بیاید این مطلب نسبتاً مبهم است، برای کاربران متوسطی که بیشتر با رابط گرافیکی کاربر کار میکنند، میتواند خیلی کاربردی باشد. شما شاید این را ندانید، اما اکثر (اگر نه همه)برنامههای گرافیکی میتوانند از طریق خط فرمان راهاندازی بشوند. این هم یک مثال: یک برنامه کوچک فراهم شده با سیستم پنجره X به نام xload وجود دارد که نموداری به نمایندگی از بارگیری سیستم نمایش میدهد. شما میتوانید این برنامه را با تایپ به شرح زیر اجرا کنید:
[me@linuxbox me]$ xload
توجه نمایید که پنجره کوچک xload ظاهر میگردد و نمایش نمودار بارگیری سیستم را شروع میکند. همچنین توجه داشته باشید که اعلان فرمان شما بعد از راهاندازی برنامه دوباره ظاهر نگردید. پوسته قبل از باز گرداندن کنترل به شما، در انتظار خاتمه یافتن برنامه میماند. اگر شما پنجره xload را ببندید، برنامه xload خاتمه یافته و اعلان فرمان باز میگردد.
اکنون به منظور اندکی آسانتر نمودن مطلب، میخواهیم دوباره برنامه xload را راهاندازی کنیم، اما این دفعه آن را در پسزمینه قرار خواهیم داد به طوری که اعلان فرمان برگشت داده شود. برای انجام این کار، ما
[me@linuxbox me]$ xload &
[1] 1223
[me@linuxbox me]$
در این حالت، اعلان فرمان برگشت میشود زیرا پردازش در پسزمینه قرار داده شد.
اکنون تصور کنید شما استفاده از علامت
[me@linuxbox me]$ xload
[2]+ Stopped xload
[me@linuxbox me]$ bg
[2]+ xload &
حال که ما یک پردازش در پسزمینه داریم، نمایش دادن فهرستی از پردازشهایی که ما راهاندازی کردهایم مفید است. برای انجام این مورد، میتوانیم یا از فرمان jobs یا از فرمان قدرتمندتر ps استفاده کنیم.
[me@linuxbox me]$ jobs
[1]+ Running xload
&
[me@linuxbox me]$ ps
PID TTY TIME CMD
1211 pts/4 00:00:00
bash
1246 pts/4 00:00:00
xload
1247 pts/4 00:00:00 ps
[me@linuxbox me]$
فرض کنید که شما یک برنامه دارید که بی توجه میشود، چگونه از دست آن خلاص میشوید؟ البته شما فرمان kill را به کار میبرید. اجازه بدهید اثر آن روی
[me@linuxbox me]$ xload &
[1] 1292
[me@linuxbox me]$ jobs
[1]+ Running xload
&
[me@linuxbox me]$ kill %1
[me@linuxbox me]$ xload &
[2] 1293
[1] Terminated xload
[me@linuxbox me]$ ps
PID TTY TIME CMD
1280 pts/5 00:00:00
bash
1293 pts/5 00:00:00
xload
1294 pts/5 00:00:00 ps
[me@linuxbox me]$ kill 1293
[2]+ Terminated xload
[me@linuxbox me]$
در حالیکه فرمان kill برای کشتن پردازشها به کار میرود، هدف واقعی آن فرستادن
kill -l
فهرستی از سیگنالهایی که پشتبانی میشوند دریافت خواهید نمود. بیشتر آنها نسبتاً مبهم هستند، اما شناختن برخی از آنها مفید است:
شماره سیگنال |
نام |
|
1 | SIGHUP |
سیگنال توقف. برنامهها میتوانند به این سیگنال گوش بسپارند و به محض شنیدن آن عمل کنند. این سیگنال موقعی که شما ترمینال را میبندید برای پردازشهای در حال اجرای ترمینال فرستاده میشود. |
2 | SIGINT |
سیگنال وقفه. این سیگنال برای قطع کردن پردازشها به آنها داده میشود. برنامهها میتوانند این سیگنال را تحویل گرفته و براساس آن عمل کنند. همچنین شما میتوانید این سیگنال را به طور مستقیم با تایپ |
15 | SIGTERM |
سیگنال خاتمه. این سیگنال برای خاتمه دادن پردازشها به آنها داده میشود. دوباره، برنامهها میتوانند این سیگنال را تحویل گرفته بر اساس آن عمل کنند. این سیگنال پیشفرضی است که اگر سیگنالی تعیین نگردیده باشد توسط فرمان kill فرستاده میشود. |
9 | SIGKILL |
سیگنال کشتن. این سیگنال باعث خاتمه یافتن فوری پردازش توسط کرنل لینوکس میشود. برنامهها نمیتوانند به این سیگنال گوش بسپارند. |
اکنون بیایید فرض کنیم شما برنامهای دارید که به طور ناامیدانهای معلق میشود و شما می خواهید آن را مرخص کنید. اکنون کاری که شما انجام میدهید:
[me@linuxbox me]$ ps x | grep bad_program
PID TTY STAT TIME
COMMAND
2931 pts/5 SN 0:00
bad_program
[me@linuxbox me]$ kill -SIGTERM 2931
[me@linuxbox me]$ kill -SIGKILL 2931
در مثال فوق من از فرمان ps با گزینه
[me@linuxbox me]$ kill 2931
آنوقت، در صورتیکه پردازش خاتمه نیابد، با سیگنال SIGKILL آن را مجبور میکنیم:
[me@linuxbox me]$ kill -9 2931
به این ترتیب سری درسهای « آموزش پوسته» به پایان میرسد. در سری بعد،