فرآیندها در خط فرمان لینوکس
همانطور که میدانید سیستمعاملهای مدرن به صورت چندوظیفهای عمل میکنند؛ به این معنا که با جابهجایی دایم بین برنامههای در حال اجرا این تصور را ایجاد میکنند که چند کار در حال انجام میباشد.
هسته لینوکس این کار را با استفاده از پروسهها یا همان فرآیندها انجام میدهد. فرآیندها شیوهای هستند که لینوکس با استفاده از آن برنامههای مختلفی را که در CPU منتظر اجرا شدن هستند را مدیریت میکند. برخی اوقات یک برنامه کند شده و یا یک اپلیکیشن خاص قادر به پاسخگویی نیست. در این فصل به برخی ابزارهای موجود در خط فرمان که به ما اجازه آزمون عملکرد برنامهها و پروسههای آنها را میدهد نگاهی میکنیم.
فرآیندها در لینوکس چگونه کار میکنند؟
هنگامی که یک سیستم شروع به کار میکند. هسته مرکزی یا همان کرنل (Kernel) فعالیتهایی را به عنوان پروسه آغاز کرده و برنامهای با نام init را اجرا میکند.
Init نیز به نوبه خود، اسکریپتهایی از شل (Shell) را که در مسیر /etc قرار دارند اجرا کرده (به آنها اسکریپتهای init میگویند) که این اسکریپتها نیز سرویسهای سیستم را آغاز میکنند.
بسیاری از این سرویسها به عنوان daemon programs پیادهسازی میشود، یعنی برنامههایی که مثل روح در پسزمینه باقی مانده و وظیفه خود را بدون رابط کاربری انجام میدهند.
این واقعیت که یک برنامه قادر است دیگر برنامهها را اجرا کند بر اساس یک طرح پردازشی بیان میشود که در این طرح پروسه والد، پروسههای فرزند را اجرا میکند.
هسته مرکزی اطلاعات هر پروسه را نگهداری میکند تا همه چیز سازماندهی شده باشد. برای مثال هر پروسه یک شماره که شناسه پروسه یا Process ID و به اختصار PID را دریافت میکند. همچنین کرنل (هسته مرکزی) حافظهای که به هر پردازش اختصاص مییابد و آمادگی پردازش برای بازگشت به اجرا را پیگیری میکند. قابل توجه است که در لینوکس پروسهها نیز همچون فایلها مالک و شناسه کاربر و … دارند.
نمایش فرآیندها با فرمان ps
رایجترین فرمان برای نمایش فرآیندها فرمان ps است. برنامه ps دارای گزینههای زیادی میباشد ولی در سادهترین شکل به صورت زیر نمایش داده میشود:
[me@linuxbox ~]$ ps PID TTY TIME CMD 5198 pts/1 00:00:00 bash 10129 pts/1 00:00:00 ps
نتایج در این مثال دو پروسه را نشان میدهد با شمارههای ۵۱۹۸ و ۱۰۱۲۹ که همان پروسههای bash و ps هستند. همانطور که میبینیم فرمان ps به صورت پیشفرض موارد زیادی را نشان نمیدهد و فقط پروسههایی که با نشست فعلی ترمینال مرتبط هستند را نشان میدهد. برای نشان دادن بایستی گزینههای بیشتری را اضافه کنیم ولی قبل از آن نگاهی به دیگر فیلدهایی که توسط فرمان ps تولید شده بیندازیم. TTY مخفف teletype و به معنی دورنگار میباشد و اشاره به ترمینال کنترل کننده پروسهها دارد. فیلد TIME مقدار زمان پردازشی استفاده شده از CPU را نشان میدهد. همانطور که میبینیم هیچ کدام باعث فعالیت زیاد کامپیوتر نمیشوند.
اکنون اگر یک گزینه به آن اضافه کنیم، میتوانیم یک تصویر بزرگتر از کاری که سیستم میکند را دریافت کنیم:
[me@linuxbox ~]$ ps x PID TTY STAT TIME COMMAND 2799 ? Ssl 0:00 /usr/libexec/bonobo-activation-server –ac 2820 ? Sl 0:01 /usr/libexec/evolution-data-server-1.10 -- 15647 ? Ss 0:00 /bin/sh /usr/bin/startkde 15751 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch -- 15754 ? S 0:00 /usr/bin/dbus-launch --exit-with-session 15755 ? Ss 0:01 /bin/dbus-daemon --fork --print-pid 4 –pr 15774 ? Ss 0:02 /usr/bin/gpg-agent -s –daemon 15793 ? S 0:00 start_kdeinit --new-startup +kcminit_start 15794 ? Ss 0:00 kdeinit Running... 15797 ? S 0:00 dcopserver –nosid and many more...
با اضافه کردن گزینه x (دقت داشته باشید که این گزینه دارای علامت دش – نمیباشد) به فرمان ps میگوییم که همه پروسهها (جدای از اینکه ترمینال چه گزینههایی را کنترل کرده) نمایش دهد. وجود علامت سوال (?) در ستون TTY نشانگر این است که ترمینال کنترلی بر روی آن ندارد و با استفاده از این گزینه ما لیست همه پروسههایی که مالک آن هستیم را نشان میدهیم.
از آنجایی که سیستم در حال اجرای پروسههای زیادی است، فرمان ps لیست بلندی را ایجاد میکند. گاهی قرار دادن ps در داخل less نمایش آن را سادهتر میکند. یک ستون جدید با نام STAT وجود دارد. STAT مخفف واژه انگلیسی state میباشد و وضعیت اخیر پروسه را نشان میدهد. این کار با استفاده از حروف اختصاری که شرح آن در جدول زیر آمده است صورت میگیرد.

وضعیت پروسه ممکن است با کاراکترهای دیگری در دنباله آن همراه شود. این کاراکترها نشانگر مشخصههای پروسههای خارجی هستند. برای مشاهده جزئیات بیشتر در این مورد به صفحات manual مراجعه کنید.
یکی دیگر از گزینههای رایج aux میباشد. این گزینه اطلاعات بیشتری را به ما خواهد داد:
[me@linuxbox ~]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2136 644 ? Ss Mar05 0:31 init root 2 0.0 0.0 0 0 ? S< Mar05 0:00 [kt] root 3 0.0 0.0 0 0 ? S< Mar05 0:00 [mi] root 4 0.0 0.0 0 0 ? S< Mar05 0:00 [ks] root 5 0.0 0.0 0 0 ? S< Mar05 0:06 [wa] root 6 0.0 0.0 0 0 ? S< Mar05 0:36 [ev] root 7 0.0 0.0 0 0 ? S< Mar05 0:00 [kh] and many more...
این مجموعه گزینهها پروسههایی که به هر کاربر تعلق دارند را نمایش میدهد. با این گزینهها ما ستونهای داده بیشتری را دریافت میکنیم که در جدول زیر نشان داده شدهاند:
| هدر | مفهوم |
|---|---|
| USER | شناسه کاربر، این مالک پروسه است. |
| %CPU | میزان استفاده پردازشگر به درصد |
| %MEM | میزان استفاده حافظه به درصد |
| VSZ | اندازه حافظه مجازی |
| RSS | Resisent Set Size میزان حافظه فیزیکی رم که پروسه از آن استفاده میکند به کیلوبایت |
| START | زمانی که پروسه شروع به کار کرده. برای مقادیر بالا 24 ساعت یک تاریخ استفاده میشود. |
نمایش پویای پردازشها با فرمان top
با وجود اینکه فرمان ps اطلاعات زیادی درباره اینکه سیستم چه میکند را به ما میدهد وای این فرمان تنها یم تصویر را از وضعیت سیستم در لحظه اجرای فرمان را به ما نشان میدهد. برای اینمه نمایشی پویاتر از وضعیت فعالیتهای ماشین را دریافت کنید، فرمان top گزینه خوبی است. برنامه top یک نمایش دنبالهدار که در لحظه (به صورت پیشفرض هر ۳ ثانیه یکبار) بروزرسانی میشود را از وضعیت پروسههای سیستم به منظور نمایش فعالیت پروسهها به ما نشان میدهد.
نام این فرمان از واقعیت گرفته شده است که از برنامه بالایی برای نمایش پروسههای بالایی سیستم استفاده میشود. نمایش فرمان top شامل دو بخش است: یک بخش خلاصه سیستم که در بالا وحود دارد و در ادامه آن جدولی از پروسههای فعالیت CPU که در ادامه، جدول آن آورده شده است:
[me@linuxbox ~]$ top
top - 14:59:20 up 6:30, 2 users, load average: 0.07, 0.02, 0.00 Tasks: 109 total, 1 running, 106 sleeping, 0 stopped, 2 zombie Cpu(s): 0.7%us, 1.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si Mem: 319496k total, 314860k used, 4636k free, 19392k buff Swap: 875500k total, 149128k used, 726372k free, 114676k cach PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6244 me 39 19 31752 3124 2188 S 6.3 1.0 16:24.42 trackerd 11071 me 20 0 2304 1092 840 R 1.3 0.3 0:00.14 top 6180 me 20 0 2700 1100 772 S 0.7 0.3 0:03.66 dbus-dae 6321 me 20 0 20944 7248 6560 S 0.7 2.3 2:51.38 multiloa 4955 root 20 0 104m 9668 5776 S 0.3 3.0 2:19.39 Xorg 1 root 20 0 2976 528 476 S 0.0 0.2 0:03.14 init 2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migratio 4 root 15 -5 0 0 0 S 0.0 0.0 0:00.72 ksoftirq 5 root RT -5 0 0 0 S 0.0 0.0 0:00.04 watchdog 6 root 15 -5 0 0 0 S 0.0 0.0 0:00.42 events/0 7 root 15 -5 0 0 0 S 0.0 0.0 0:00.06 khelper 41 root 15 -5 0 0 0 S 0.0 0.0 0:01.08 kblockd/ 67 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod 114 root 20 0 0 0 0 S 0.0 0.0 0:01.62 pdflush 116 root 15 -5 0 0 0 S 0.0 0.0 0:02.44 kswapd0
بخش خلاصه سیستم شامل اطلاعات مفیدی است که در جدول زیر نمایش داده میشود:
| سطر | فیلد | مفهوم |
|---|---|---|
| 1 | top | نام برنامه |
| 14:59:20 | زمان فعلی روز | |
| up 6:30 | این را آپ تایم مینامند. که میزان زمان از وقتی است که ماشین آخرین بار بوت شده است. در این مثال 6:30 ساعت روشن بوده است. | |
| 2 users | دو کاربر لاگین هستند. | |
| load average: | load average اشاره به فرآیندهایی که منتظر اجرا هستند دارند. پس تعداد پروسههایی است که وضعیت قابل اجرا دارند و پردازشگر را به اجرا گذاشتهاند. |
برنامه top دستورات صفحه کلید را قبول میکند. دو مورد از مهمترین آنها h است که صفحه راهنمای برنامه را نشان میدهد و همچنین q که ما را از برنامه top خارج میکند.
محیطهای دسکتاپ اپلیکیشنهای گرافیکی را به ما ارائه میکند که اطلاعاتی مشابه برنامه top را در اختیار ما قرار میدهند (مانند Task Manager در محیط ویندوز). ولی برنامه top بهتر از نسخههای گرافیکی میباشد. به دلیل اینکه سریعتر عمل میکند و منابع سیستمی بسیار کمتری را درگیر خود میکند. علاوه بر آن، برنامه مانیتوری سیستم ما نبایستی بازدهی سیستمی که در حال بررسی آن هستیم را کاهش دهد.
درباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش جفنگ استفاده میکند. درباره چگونگی پردازش دادههای دیدگاه خود بیشتر بدانید.
دیدگاهتان را بنویسید