یک processیک برنامه در حال اجرا میباشد .
سیستم unix برای کنترل نمودن process های در حال اجرا برنامه های مختلفی را فراهم ساخته است .
بی شک برنامه ps مهمترین برنامه از این نوع میباشد که وضعیت process های کنونی شما را نشان میدهد .
هنگامیکه process ها در صحنه اجرا میشوند ، میتوان بوسیله سیگنال هائیکه از صفحه کلید ارسال میگردد آنها را متوقف نمود .
اما برای مدیریت process هائیکه در زمینه اجرا میگردند با استفاده از فرمان kill آنها را متوقف میسازیم .
دیگر فرامینی که در این فصل مورد بررسی قرار میگیرد امکان تغییر دادن محیط process ها را فراهم میسازند .
فرمان nice اولویت اجرای process را کاهش میدهد تا process های دیگر بیشتر مورد توجه قرار گیرند .
فرمان nohup این امکان را در اختیار شما قرار میدهد که پس از خروج از سیستم process شما همچنان در حال اجرا باقی بماند .
فرمان at این امکان را در اختیار شما قرار میدهد که برنامه ای را در زمانیکه شما تعیین می نمائید به اجرا در بیاید .
2-7- گزارش وضعیت process ها
فرمان ps
یک برنامه در حال اجراء رایک process مینامند وهر process بوسیله یک شماره واحد شناخته میشودبه این شماره PID ویاشماره مشخصه process میگویند.
process های باشماره مشخصه process1.
0 های ویژه سیستم میباشند.
process شماره صفرkernel سیستم unix میباشدو process شماره init process .1 نام دارد.
این process وظیقه برپاسازی ساختار process ها را بر عهده دارد .
در سیستم unix تمام process ها توسط process دیگر ایجاد میشوند که به آن process پدر میگویند.
پدرویابه تعبیری دیگر پدر بزرگ تمام process ها process شماره 1 میباشد.
شماره مشخصه بقیه process ها در محدوده 2 تا 30.000 قراردارد .برنامه ps نه تنها pid هابلکه اطلاعات دیگر ی درمورد process های در حال اجراءرا نمایش میدهد.برای مثال جهت مشاهده وضعیت process های اجراءشده در زمینه ویامشخص نمودن pid برای خاتمه دادن به process که درزمینه در حال اجراء میباشد از فرمان ps استفاده میکند همچنین از فرمان ps برای مشاهده process هائی که توسط دیگر استفاده کنندگان به اجراءدر آمده استفاده میکنیم.
اگرهیچ opthion رادر سطرفرمان ps اختصاص ندهیدتنها اطلاعات مربوط به process های ترمینال کنترلی خودرامشاهده خواهیدکرد.
$ ps
pid tty time command
25 2b 0:09 sh
156 2b 0:01 ps
$
چهارفیلدخروجی عبارتنداز شماره مشخصه process ونام ترمینال کنترلی.
زمان مصرف شده برای اجرای فرمان ونام فرمان.
معمولا process ها ازطریق یک ترمینال کنترلی به اجراء در می آیند .اگر یک process که درزمینه اجراءمیگردد به ترمینال کنترلی اختصاصی نیافته باشد به آن daemon process ویا daemons میگویند.
برای مشاهده وضعیت یک process خاص بصورت زیر عمل نمائید
$ ps_ p25
pid tty time command
25 01 0:09 sh
$
برای اجراءکردن یک process درزمینه در انتهای سطرفرمان علامت(E) راقراردهید در اینصورت اجرای process شروع میگردد بدون آنکه ترمینال شما منتظر خاتمه یافتن اجرای process گردد .
$ ls _ lr / >/ dev/ null e
157
$
هنگامیکه اجرای یک process در زمینه شروع میشود shell یک شماره بعنوان شماره مشخصه process نشان میدهد .
در مثال فوق عدد 157 شماره مشخصه process است که در زمینه اجراء نموده ایم .
خروجی فرمان ls که به صورت بازگشتی از ریشه به اجراء در میاید بصورت استاندارد بر روی صفحه ترمینال ما ظاهر میگردد که ما با تغییر مسیر دادن آن به فایل null از اینکار جلوگیری نموده ایم .
$PS PID TTY TIME COMMAND 25 2b O:O9 SH 157 2b O: P3 LS- LR 158 2b O:O1 PS $ اگر فرمان PS را بعد از چند لحظه دوباره به اجراء در بیاورید مشاهده خواهید کرد که زمان مصرف شده برای فرمان ils اضافه میشود.
$PS PID TTY TIME COMMAND 25 2b O:O9 SH 157 2b O: 4 LS – LR 158 2b O:O1 PS $ تا بحال از فرم کوتاه فرمانps استفاده نمودیم برای استفاده ا زفرم بلند خروجی فرمان ps از L ـ در سطر فرمان ps استفاده نمائید .
$ ps – l F S UID PID PPID C PRI NI ADDR S2 WCHAN TTY TIME CMD 1 S USEN 2 25 1 0 30 20 39 32 CHILD 2B 0: 10 SH 1 R USEN 2 160 25 13 56 20 46 64 2B 0: 01 PS $ البته ممکن است که اعداد خروجی فرمان PS با آنچه که شما بر روی ترمینال خود مشاهده میکنید تفاوت داشته باشد .
در اینجا شرح مختصری در مورد فیلدها و اطلاعات موجود در آنها رابیان می نمائیم .
lag : f اختصاص داده شده به process 01 : در حافظه 02 : system process 4 : برای i/o فیزیکی در حافظه قفل شده 10 : در حال swap 20 : بوسیله process دیگری ردیابی میگردد.
S : حالت process S: SLEEP W : منتظر WAIT R : در حال اجراء run I: میانی INTErMEDIATE Z : خاتمه یافته T : متوقف شده UID : اسم استفاده کننده مالک process PID : شماره مشخصه process PPID : شماره مشخصه برای پدر process C : زمان مصرف شده CPU برای زمانبندی process PRI : الویت process ( اعداد بزرگتر – اولویت کمتر را نشان میدهند ) NI : عددی که در محاسبه اولویت استفاده میگردد .
ADDR : اگر process در حافظه باشد این عدد آدرس حافظه را نشان میدهد و در غیر اینصورت آدرس دیسک میباشد .
SZ : اندازه process در حافظه WCHAN : هنگامیکه یک process تقاضائی دارد که در دسترس نمیباشد process تا زمان مهیا شدن نیازش باید منتظر بماند .
علت انتظار process بصورت یک آدرس در این فیلد نوشته میشود .
اگر فیلد خالی باشد process در حال اجراء میباشد .
TTY : اسم ترمینال کنترلی process TIME : زمان مصرف شده برای اجرای process با استفاده از فرمان PS میتوانید تمام process های در حال اجراء را مشاهده نماید .
برای اینکار میتوانید از –EL در سطر فرمان PS استفاده نمائید.
$PS – EL F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 3 S 0 0 45 0 20 1D 8 NUNOUT ?
570:08 SWAPPEL 1 S 1 0 0 30 20 2 9 40 CHIED ?
0:01 INIT 1 S 26 1 0 28 20 3D 32 TTY(O) 2C 0:05 GETTY 1 S USEN2 30 1 0 30 20 39 32 HILD 2B 0:10 SH 1 R USEL2 161 30 13 56 20 46 64 2B 0:01 PS 1 S 21 1 0 40 20 4A 40 SLEEP ?
1:12 CLON $ 3=7-خاتمه دادن به یک process فرمان KILL گاهی از اوقات لازم است که اجرای یک process را که شما شروع نموده اید متوقف سازید .
مثلا برنامه آنطور که شما مایل بودید عمل نمیکند و یا اینکه دیگر نیازی به اجرای برنامه ای که در زمینه اجرا نمودید ندارید .
یک برنامه که در زمینه اجراء میگردد نه تنها بوسیله وقفه بلکه بوسیله سیگنال quit هم خاتمه نمی یابد ، زیراshell process , های زمینه را از سیگنال ها محفوظ نگاه میدارد .
اما بوسیله ارسال سیگنال نرم افزاری خاتمه ، میتوانید یک process را که در زمینه در حال اجراء شدن است خاتمه دهید .
زیرا shell در مقابل این signal محافظتی انجام نمیدهد .
برای ارسال یک سیگنال نرم افزاری به یک process از فرمان kill با قالب زیر استفاده نمائید .
$ kill ( - signal – no ) pid در اینجا pid شماره مشخصه process میباشد که بلافاصله پس از اجرای process در زمینه توسط shell نمایش داده میشود .
اگر شماره مشخصه process را فراموش کردید با استفاده از فرمان ps شماره مشخصه process مورد نظر خود را بدست آورید .
هنگامیکه فرمان ps را صادر میکنید تمام process هائیکه هم اکنون به ترمینال شما اختصاص داده شده اند نشان داده میشوند .
signal – no شماره سیگنالی است که برای process ارسال میگردد لیست سیگنال های عمومی بشرح زیر میباشد : hup 1 زمانیکه خط تلفن قطع شود ارسال میگردد.
hang up )) 2 int هنگام فشار دادن کلید delete یا break ارسال میگردد.
3 quit هنگام فشار دادن کلیدهایctnl ”/” بطور همزمان ارسال میگردد (interupt) 9 kill مطمئن ترین راه برای خاتمه دادن به یک process زیرا این سیگنال را نمی توان دریافت کرد و یا نادیده گرفت .
TERM 15 برای خاتمه دادن به یک process ارسال می گردد .
میتوان آن راگرفت ویا اینکه نادیده انگاشت هنگامیکه به یک process سیگنال شماره3 ارسال میگردد cone image مربوط به این process بصورت یک فایل به اسم cone تحت فهرست راهنمای کنونی ذخیره میشود .
از این فایل برای دنبال کردن و رفع اشکال process توسط نرم افزارهای اشکال زدا مانند sdb symbolic debuger)) استفاده میشود.
اگر در سطر فرمان kill شماره سیگنال را اختصاص ندهید ، اجرای process نامبرده شده خاتمه می یابد .
$ ls – lr / > / dev / null E 830 $ ps pid tty time command 740 2b 0:07 sh 830 2b 0:00 ls _ lr / 83 1 2b 0:01 ps $ اکنون سعی کنید با فشار دادن کلید break و یا del به تمام process ها سیگنال وقفه ارسال نمائید و سپس با استفاده از فرمان ps حاصل کار خود را مشاهده نمائید .
$ (interrupt) $ ( interrupt) $ ps pid tty time command 740 2b 0:07 sh 830 2b 0:20 ls_ lr / 832 2b 0:01 ps $ همانطور که مشاهده میکنید process شماره 830 که در زمینه در حال اجراء میباشد همچنان به کار خود ادامه میدهد و سیگنالهای ارسالی در کار آن وقفه ای ایجاد نمی کند .
حال با استفاده از فرمان kill این process را خاتمه دهید .
830 $ kill $ps pid tty time command 740 2b 0:07 sh 834 2b 0:01 ps $ پس از اجرای فرمان process kill .
شماره 830 که در زمینه در حال انجام بود خاتمه مییابد .
در برخی از سیستمها پس از اجرای فرمان kill پیامی بصورت زیر بر روی صفحه مشاهده میگردد.
$ 830 : termnated و بدین صورت بشما اعلام میدارد که process با شماره مشخصه 830 واقعا خاتمه یافته است .
گاهی اوقات برنامه ها طوری طراحی شده اند که در مقابل سیگنال خاتمه مصونیت داشته باشند .
در این صورت برنامه signal بصورت فوق نمیتواند process را خاتمه دهد .
اگر چه شما میتوانید با اختصاص دادن signal _ no سیگنال شماره 9 را برای process ارسال نمائید .
این سیگنال همواره میتواند هر process را که به شما تعلق دارد خاتمه دهد.
$ kill _ 9 pid در اینصورت pid شماره مشخصه process میباشد و 9ـ ارسال سیگنال شماره 9 را نشان میدهد.
این روش مطمئن ترین راه برای خاتمه دادن به یک process میباشد .
4-7- محافظت یک process از سیگنالهای hangup, quit فرمان nohup بطور معمول ، هنگامیکه شما از سیستم unix خارج میشوید ، تمام process هائیکه در زمینه شروع نموده اید خاتمه می یابند .
موقعی که شما logoll می نمائید ، kernel سیگنال hang up را برای تمام process هائیکه شما شروع نموده اید ارسال میدارد و آنها بوسیله این signal خاتمه می یابند .
این رفتار سیستم در صورتیکه خط شما بصورت غیر عمدی قطع شده باشد ، مطلوب نمیباشد .
مثلا اگر خط تلفن اشتباها قطع شده باشد ، شما انتطار ندارید که process ها خاتمه یابند .
در اینمورد ، خوشبختانه سیستم unix راه ساده ای برای ادامه اجرای process های در صحنه و یا در زمینه حتی بعد از اینکه شما logoll نمودید فراهم ساخته است .
و یا در زمینه حتی بعد از اینکه شما logoll نمودید فراهم ساخته است .
فرمان nohup این امکان را فراهم میسازد که اجرای برنامه های شما هنگام logoll ادامه پیدا کند .
فرم کلی فرمان nohup بصورت زیر میباشد .
$ nohup command line در اینجا command line یک سطر فرمان میباشد ، در اینصورت هنگامیکه شما logoll نمائید ، برنامه nohup مانع از ارسال سیگنال خاتمه یافتن به command line میشود .
فرمان nohup تمام خروجیهای حاصله از command line شامل خروجی استاندارد و خطای استاندارد را در فایلی به نام nohup .
out در فهرست راهنمای کنونی ذخیره می کند .
اگر اجازه نوشتن به این فایل در فهرست راهنمای کنونی ایجاد نشده باشد ، خروجی ها برای فایلی به همین اسم در فهرست راهنمای خانگی شما ارسال میگردد.
برای تمرین فرمان nohup ، یک فرمان مثلا ls _ lr را با استفاده از nohup در زمینه اجراء نمائید .
سپس logoll نموده و پس از چند دقیقه مجددا logon نمائید و فایل nohup .
out را مشاهده کنید و بدین وسیله مشاهده میکنید که فرمان صادره با موفقیت انجام شده است .
$ nohup ls _ lr / E 820 sending output to nohup.
out $ ( ^D) login : user 2 password : $ cat nohup .
out ممکن است سیستم شما پیام sending output to nohup !
out را صادر ننماید .
5 –7- اجراکردن یک process با اولویت کمتر فرمان nice اجرای یک process توسط cpu انجام میشود.
قطعاتی از زمان که هنگام اجرای یک process توسط cpu به آن اختصاص داده میشود را time slice مینامند .
cpu; یک process را به اندازه یک time slice اجراء میکندو سپس process بعدی را اجراء میکند.
اندازه time slice تحت تاثیر اولویتی است که kernel هنگام زمانبندی به هر process نسبت میدهد .
به process هائیکه اولویت بیشتری داشته باشند time slice های بزرگتری اختصاص داده میشود .
گاهی از اوقات ممکن است که بخواهید یک برنامه را با اولویت کمتر از معمول اجراء نمائید .
بنابراین تقاضای برنامه برای cup کاهش پیدا میکند و به دیگر برنامه ها اندکی بیشتر زمان cpu اختصاص داده میشود .
اگر به یک برنامه اولویت کمتری اختصاص داده شود ، این برنامه نسبت به دیگر برنامه ها کندتر اجراء میشود .
برنامه هائی که بیشتر از معمول از منابع سیستم استفاده میکنند بیش از دیگر برنامه ها باعث کند شدن سیستم میگردند.
این نوع برنامه ها کاندیداهای مناسبی برای اجرا نمودن با اولویت کمتر میباشند .
یک مثال مناسب ا زاین قبیل برنامه ها برنامه nroll ، برنامه قالب دهنده متن سیستم unix میباشد .
برنامه ای که با اولویت کمتری اجرا میشود مدت زمان بیشتری طول خواهد کشید تا خاتمه یابد زیرا برنامه هائیکه اولویت کمتری دارند هنگام اجرا شدن قطعات کوچکتری از زمان cpu به آنها اختصاص داده میشود .
فرمان nice این امکان را در اختیار شما قرار میدهد که اولویت یک process را کاهش دهید .
سطر فرمان nice بصورت زیر میباشد .
$ nice ( - increment) command line در اینجا command line یک سطر فرمان shell میباشد .
اگر از آرگومان – increment (که محدوده آن 1 الی 19 میباشد ) استفاده نمائید آنگاه به مقدار nice فرضی process که عدد 20 میباشد اضافه میشود ، در اینصورت کمیت nice افزایش مییابد و باعث میشود که اولویت زمانبندی process کاهش یافته و در نتیجه قطعات زمانی (time slic )spu که قرار است به process اختصاص داده شوند کاهش یابند .
اگر – increment اختصاص داده نشود مقدار قراردادی 10 مورد استفاده قرار میگیرد بنا براین عدد nice بدست آمده برای process عدد 30 خواهد بود .
استفاده کنندگان معمولی تنها میتوانند اولویت process های خود را کاهش دهند اما superusen ( کسی که با اسم استفاده کننده root از سیستم استفاده میکند ) قادر است اولویت برنامه های خود را افزایش دهد.
برای این منظور باید مقدار increment را به صورت یک عدد منفی وارد نماید .
برای مثال اگر مقدار increment بصورت 10—تعیین شود آنگاه عدد nice fvsj Hlni fvhd process عدد 10 میباشد20- 10=10) ) در اینصورت اولویت زمانبندی process افزایش مییابد.
معمولا kernel اولویت اجرای process های زمینه را برابر اولویت process های در صحنه قرار میدهد .
شما میتوانید با اسبفاده از فرمان nice اولویت یک process در زمینه را نیز کاهش دهید.
$ nice – 5 ls / / dev / null E 828 $ در این مثال فرمان ls را با استفاده از فرمان nice در زمینه اجراء نموده ایم و عدد nice اختصاص داده شده به این 20+5=25, process خواهد بود بنابر این اولویت زمانبندی process کاهش می یابد.
فرمان nice را میتوان همراه فرمان nohup بکار برد .
$ nohup nice ls – lr / / dev/ null E 829 $ در این مثال خروجی فرمان nohup در فایل nohup .
out قرار خواهد گرفت .
استفاده از فرمان nohup علاج واقعی برای کاهش تقاضای یک process هائی را که تقاضای بیشتری دارند برای زمانیکه سیستم خلوت تر میباشد (هنگام ظهر ) زمانبندی نمائید.
6-7- اجراء یک process در زمانی مشخص فرمان at معمولا محاوره شما با سیستم unix بصورت پرسش و پاسخ میباشد .
شما یک فرمان را تایپ میکنید و پاسخی را دریافت میدارید ، فرمان دیگری را تایپ میکنید و پاسخ دیگری دریافت میدارید و …… گاهی اوقات مایلید که سیستم فرمان شما را در زمانی مشخص اجراء نماید .
سیستم unix فرمان at را برای اجرا نمودن یک process در زمان مشخص فراهم نموده است .
فرم کلی فرمان at بصورت زیر میباشد .
$ at time (date ) ( + increment) time از یک الی چهار رقم تشکیل میشود.
از پسوندهای اختیاری pm,am هم میتوانید استفاده نمائید.
اسامی خاص midnight,noon,next,now نیز تشخیص داده میشوند .
اعداد یک و دو رقمی ساعات را و اعداد سه و چهار رقمی ساعات و دقایق را مشخص میکند .
اگر هیچگونه حرفی بعد از ارقام بکار برده نشود زمان 24 ساعته در نظر گرفته میشود .
date اختیاری میباشد و میتواند بصورت یک اسم ماه و به دنبال آن روز ماه و یا اینکه یک روز هفته نشان داده شود .
اسامی tomorrow و today نیز تشخیص داده میشوند .
اگر date اختصاص داده نشود today ودر صورتیکه time از زمان کنونی بزرگتر باشد tomorrow در نظر گرفته میشود .
اگرماه اختصاص داده شده از ماه کنونی بزرگتر باشد سال آینده در نظر گرفته میشود .
incerment نیز اختیاری میباشد و از یک عدد که به دنبال آن یکی از پسوندهای minutes, mounths, weeks, days , hours و یا years قرار گرفته تشکیل میشود .
مثال های زیر تاریخ و زمان معتبر میباشند : امروز ساعت 8 صبح at 8am سه شنبه ساعت 30/9 شب at 2130 tuesday در ساعت 12 ظهر جمعهat 12 noon friday روز سوم آوریل ساعت 2 بعد از ظهر at 2pm april 3 هنگام فراخوانی فرمان at میتوانید سطر فرمان را نیز اختصاص دهید و یا اینکه اسم یک فایل را مشخص نمائید .
$ at 5 pm echo ^ G ^ G time to logoll / dev / tty 2b (^D) $ در مثال فوق اگر ترمینال کنترلی شما tty2b باشد در ساعت 5 بعد از ظهر با بصدا در آوردن بوق ترمینال پیام (ring ring ) time to logoll بر روی صفحه ترمینال شما ظاهر میگردد.
معمولا خروجی استاندارد و خروجی خطای استاندارد فرامینی که توسط at اجرا میشوند بصورت mail برای استفاده کننده ارسال میشود .
مگر اینکه بصورت دیگری تغییر مسیر داده شوند .
یک استفاده کنند تنها در صورتیکه اسمش در فایل usr/lib/ cron/ at.
allow / آمده باشد مجازبه استفاده از فرمان at میباشد .
اگر این فایل وجود نداشته باشد در صورتیکه نام استفاده کننده در فایل / usr / lib / cron / at.
deny وجود داشته باشد نمیتواند از فرمان at استفاده کند .
اگر هیچکدام از این دو فایل موجود نباشد فقط superuser مجاز به استفاده از فرمان at میباشد .
$ tty / dev / tty 2b $ at 2100 echo time to logoll / dev / tty 2b echo it is now date .
/ dev / tty2b (^D) $ مثال فوق در ساعت 9 شب پیام های مشخص شده برای استفاده کنند ارسال میگردد.
$ at 3 pm jan2 cmds .
sh در روز دوم ژانویه ساعت 3 بعد از ظهر برنامه cmds .
sh اجرا میگردد.
با استفاده از فرمان at میتوانید یک برنامه را بصورت periodic اجرا نمائید .برای اینکار باید یک فرمان at در داخل روال shell قرار دهید و برای یکبار آنرا بصورت دستی اجرا نمائید و از آن به بعد با اجرا شدن فرمان at مرتبه بعدی اجرای برنامه زمانبندی میگردد.
$ cat $home / bin / periodic.
sh # put command here to do some thing # each morning at 3a $ home / bin / periodic .
sh $ در مثال فوق فایل periodic .
sh شامل سطرهای فرمان میباشد و در انتهای آن یک فرمان at برای اجرای همین فایل در ساعت 3 صبح قرار داده شده است .
اگر فرمان $ at 3a $home / bin / periodic .
sh را برای یکبار اجرا نمائید آنگاه برای دفعات بعد با استفاده از فرمان at که در داخل فایل periodec .
sh قرار داده شده زمانبندی صورت میگیرد .
7-7- فرمان batch فرمان batch نیز مانند فرمان at عمل میکند با این تفاوت که هر وقت بار سیستم کم باشد فرمان مشخص شده در سطر فرمان batch اجرا میگردد.
اگر بار سیستم کم باشد فرمان اختصاص داده شده بلافاصله اجرا میشود و گرنه اجرای آن تا زمانیکه خود سیستم تشخیص دهد به تعویق می افتد .
$ batch nrollb k .
sh (^ D) $ در این مثال فرمان nroll bk .
sh در زمانیکه بار سیستم کم باشد ( خلوت باشد ) به اجرا د می آید .
برای مشاهده لیست برنامه های در صف at و یا batch به صورت زیر عمل کنید .
$at – l job – number … در اینصورت برنامه at لیست برنامه هائیکه برای استفاده کننده زمانبندی شده اند را نمایش میدهد .
پس از اینکه at برنامه مورد نظر شما را زمانبندی نماید یک شماره بر روی صفحه نمایش میدهد .
این شماره برنامه (job number) بعدها برای مراجعه به برنامه زمانبندی شده بکار میرود .
در صورتیکه فقط لیست برخی از برنامه های زمانبندی شده را نیاز داشته باشید میتوانید در سطر فرمان at – l آنها را قید نمائید.
در هر صورت پس از اجرای فرمان at شماره برنامه را یادداشت نمائید تا در مراجعات بعدی از آن استفاده نمائید .
یک مورد استفاده شماره برنامه برای حذف نمودن برنامه های زمانبندی شده قبل از اجرا شدن میباشد .
برای این منظور فرمان at را بصورت زیر فرا خوانید .
$at - job – number پس از اجرای فرمان فوق برنامه نامبرده شده از صف اجرا خارج میگردد.