وقتی شما یک برنامه رو روی یونیکس یا لینوکس اجرا میکنید سیستم عامل شما یک محیط خاص رو برای اون برنامه اختصاص میدهد. آن محیط همه چیزی را که برنامه شما برای اجرا شدن بهش احتیاج داره در اختیارش قرار میدهد. وقتی شما یک دستوری را در سیستم لینوکس خود اجرا یا چیزی را در آن ایجاد میکنید و… سیستم برای شما یک پروسه ایجاد میکند. هر پروسه یک آی دی دارد که به اصطلاح به آن Process ID یا pid گفته میشود. همچنین هیچ دو پراسه های با آی دی های یکسان در سیستم وجود نخواهند داشت.
شروع پراسه
برای به اجرا در آوردن ی پراسه شما دو راه دارید:
- پروسه های foreground
- پروسه های background
پراسه های Foreground
هر پراسه ای که در foreground اجرا میشه یک خروجی رو برای شما به نمایش میذاره. معمولا دستور ها در حالت عادی به این حالت اجرا میشن. به عنوان مثال:
1 2 3 4 |
blog@Arshatech:~$ ls ch*.doc ch01-1.doc ch010.doc ch02.doc ch03-2.doc ch04-1.doc ch040.doc ch05.doc ch06-2.doc ch01-2.doc ch02-1.doc |
همونطور که شما میبینید خروجی دستور ls در صفحه نشون داده شده است.
پراسه های Background
اگر دستوری رو در یونیکس یا لینوکس با عبارت & وارد کنید این دستور به شما خروجی نشون نمیده و به اصطلاح در background اجرا میشه. بعنوان مثال:
1 2 |
blog@Arshatech:~$ ls ch*.doc & [1] + Done ls ch*.doc & |
لیست پراسه های در حال اجرا
شما میتونید برای اینکه متوجه بشید چه برنامه هایی با چه pid ای روی سیستم شما در حال اجراست رو ببینید از دستور زیر استفاده کنید:
1 2 3 4 5 |
blog@Arshatech:~$ ps PID TTY TIME CMD 18358 ttyp3 00:00:00 sh 18361 ttyp3 00:01:31 abiword 18789 ttyp3 00:00:00 ps |
یکی از امکاناتی که این دستور به شما میده اینه که بتونید از f- برای دیدن جزئیات بیشتر استفاده کنید:
1 2 3 4 5 6 |
blog@Arshatech:~$ ps -f UID PID PPID C STIME TTY TIME CMD alex 6738 3662 0 10:23:03 pts/6 0:00 first_one alex 6739 3662 0 10:22:54 pts/6 0:00 second_one alex 3662 3657 0 08:10:53 pts/6 0:00 -ksh alex 6892 3662 4 10:51:50 pts/6 0:00 ps -f |
حالا به ی توضیح مختصر در باره فیلدهایی که نمایش داده شده میدم:
- UID: این بخش نام کاربری که پراسه رو ایجاد کرده میده.
- PID: آی دی پراسه
- PPID: آی دی پراسه پدر رو میده. چون ممکنه اون پراسه خودش توسط پراسه ای دیگه بوجود اومده باشه.
- C: استفاده cpu از اون پراسه رو نشون میده
- STIME: زمان شروع پراسه
- TTY: ترمینالی که پراسه داره ازش استفاده میکنه
- TIME: زمان cpu که توسط پراسه گرفته شده است
- CMD: دستوری که باعث بوجود آمدن پراسه شده است.
به جز f- چیزهای دیگه ای که شما میتونید با ps همراه کنید:
- a-: اطلاعات در باره همه کاربرها رو نمایش میده
- x-: اطلاعاتی که پراسه های به اجرا در آمده خارج از ترمینال هستند را نشان میدهد.
- u-: اطلاعات اضافی را نمایش میدهد. مانند f-
- e-: اطلاعات گسترده تری را نمایش میدهد.
خاتمه دادن به پراسه
شما میتونید به یک پراسه به روش های مختلفی خاتمه بدید. یکی از راه های معمول برای این کار اینه که شما از طریق ترمینال یک سیگنال توقف بوسیله cntrl + c ارسال کنید. این حالت وقتی امکان پذیره که دستور داره در حالت foreground به اجرا در میاد.
اگر یک پراسه ای در حالت background در حال اجراست شما میتونید با دستور kill اون رو از بین ببرید.
به مثال زیر دقت کنید:
1 2 3 4 5 6 7 8 |
blog@Arshatech:~$ ps -f UID PID PPID C STIME TTY TIME CMD alex 6738 3662 0 10:23:03 pts/6 0:00 first_one alex 6739 3662 0 10:22:54 pts/6 0:00 second_one alex 3662 3657 0 08:10:53 pts/6 0:00 -ksh alex 6892 3662 4 10:51:50 pts/6 0:00 ps -f blog@Arshatech:~$ kill 6738 Terminated |
اگر به هر علتی شما از دستور بالا استفاده کردید و دیدید که پراسه مورد نظر از بین نرفته میتونید به صورت زیر اقدام کنید:
1 2 |
blog@Arshatech:~$ kill -9 6738 Terminated |
پراسه های پدر و فرزند
هر پراسه ای دو مقدار داره یکی pid ودیگری ppid. بیشتر دستور هایی که شما در لینوکس اجرا میکنید از این دست هستند.
پراسه های Zombie و Orphan
گاهی اوقات پراسه بچه از بین میره که در این حالت پراسه پدر میتونه تصمیم مورد نظر رو مبنی برا ایجاد پراسه بچه جدید و یا … بگیرد که این حالت همان zombie است. اما گاهی پراسه پدر از بین میرود و پراسه بچه باقی میماند که این حالت را orphan میگویند.
پراسه های Daemon
این پراسه ها پراسه های background سیستمی هستند که گاها با سطح دسترسی root و یا توسط سرویس ها ایجاد میشوند. این پراسه ها قابلیت کنترل شدن در ترمینال را ندارند و نمیتوانند dev/tty/ را باز کنند.اگر شما دستور ps -ef را وارد کنید میتوانید تعداد زیادی از آن ها را ببینید که با علامت ؟ مشخص شده اند.
در اصل این پراسه ها پراسه های background هستند. مثلا شما پراسه پرینتری که منتظر درخواست پرینت می باشد را در نظر بگیرید. این پراسه را daemon می گویند. اگر شما برنامه ای دارید که نیاز است مدت طولانی به اجرا در بیاید بهتر است آن را به حالت daemon در آورده و در background اجرا کنید.
دستور top
این یک دستور بسیار مفید می باشد که به شما اجازه میدهد خیلی سریع و بر طبق ضوابطی خاص بتونید اطلاعات مربوط به پراسه ها رو ببینید. این دستور به شما اجازه دیدن وضعیت cpu و ram و… رو در یک قالب خیلی خوب میده.
Job ID و Process ID
پراسه های معلق و background معمولا با Job ID نیز نمایش داده میشود. این عدد با عدد pid متفاوت است و چون کوتاه تر می باشد از آن استفاده میشود. همچنین از job میتونید برای پراسه های سری که در یک زمان در حال اجرا هستند استفاده کنید.