منابع آموزشی و پژوهشی، برای دانشگاه و مدرسه
پشتیبانیانتشار محتوا
دورهٔ آموزشیرایگان

آموزش لینوکس مقدماتی؛ از صفر تا SSH و کار با موبایل

۱۹ درس در ۵ فصل۹ ساعت و ۱۲ دقیقهدربارهٔ دوره
۳. سیستم و شبکهدرس ۱۰ از ۱۹

پردازه‌ها، کارهای ترمینال و مصرف منابع

۳۰ دقیقه آموزش متنی
در این درس ۵ بخش

سناریو: ترمینال منتظر چه چیزی است؟

فرمانی اجرا کرده‌اید و اعلان ترمینال برنمی‌گردد. آیا سیستم خراب شده، برنامه هنوز کار می‌کند یا فقط منتظر است؟ برای پاسخ باید پردازه و منابع را بشناسید. برنامه فایلی است که امکان اجرا دارد؛ پردازه یا process نمونهٔ در حال اجرای آن است. چند پنجره از یک برنامه می‌توانند چند پردازه ایجاد کنند. هر پردازه یک شناسهٔ عددی به نام PID دارد. این شماره در هر بار اجرا ممکن است فرق کند و پس از پایان پردازه بعدها دوباره استفاده شود؛ شمارهٔ مثال‌های آموزشی را کورکورانه وارد نکنید.

bash
ps
ps -u "$USER" -o pid,comm
top

ps تصویری از پردازه‌ها در همان لحظه می‌دهد. فرمان اول معمولاً پردازه‌های مربوط به کاربر و ترمینال فعلی را نشان می‌دهد؛ فرمان دوم پردازه‌های کاربر فعلی را با ستون شناسه و نام برنامه فهرست می‌کند. top مرتب صفحه را تازه می‌کند و مصرف پردازنده و حافظه را کنار اطلاعات کلی سیستم نشان می‌دهد. برای خروج از top کلید q را بزنید. اعداد با گذشت زمان تغییر می‌کنند؛ یک نمونهٔ کوتاه برای تشخیص قطعی علت کندی کافی نیست. در این تمرین فقط مشاهده کنید و از گزینه‌های تغییر یا پایان‌دادن پردازه‌ها در top استفاده نکنید.

فرمان پیش‌زمینه ترمینال را در اختیار می‌گیرد تا تمام شود یا متوقفش کنید. برای تجربه، فرمان زیر را اجرا کنید؛ sleep سی ثانیه منتظر می‌ماند و معمولاً خروجی ندارد. پیش از پایان انتظار، Ctrl+C را بزنید؛ یعنی Ctrl را نگه دارید و C را فشار دهید. معمولاً پیام ^C و سپس اعلان شل را می‌بینید. این میان‌بر درخواست وقفه را به کارِ پیش‌زمینه می‌فرستد. بی‌خروجی‌بودن sleep طبیعی است و نشانهٔ خرابی نیست.

bash
sleep 30

یک کار پس‌زمینهٔ متعلق به خودتان

علامت & در انتهای دستور، آن را در پس‌زمینه شروع می‌کند و اعلان شل زودتر برمی‌گردد. Bash این اجرا را یک job می‌نامد. شمارهٔ job فقط در همان شل معنا دارد؛ PID شناسهٔ پردازه در سیستم است. jobs همهٔ پردازه‌های رایانه را نشان نمی‌دهد، بلکه کارهای شل فعلی را می‌بیند. دستورهای بعدی را پشت سر هم در همان پنجرهٔ Bash اجرا کنید. ما فقط یک sleep آزمایشی می‌سازیم و شناسهٔ دقیق همان اجرا را در متغیر practice_pid نگه می‌داریم.

bash
sleep 300 &
practice_pid=$!
printf 'Practice PID: %s\n' "$practice_pid"
ps -p "$practice_pid" -o pid,comm
jobs -l

متغیر ویژهٔ $! شناسهٔ آخرین پردازهٔ پس‌زمینهٔ آغازشده را می‌دهد. در خروجی ps باید همان عدد و نام sleep را ببینید. jobs -l نیز شماره‌ای داخل کروشه، وضعیت و PID را نشان می‌دهد؛ این عددها ثابت نیستند. اگر بیش از پنج دقیقه گذشته باشد، sleep خودش تمام شده است. در آن حالت آزمایش را از ابتدا بسازید و شناسهٔ قبلی را برای دستور بعدی به کار نبرید. هیچ شناسه‌ای از پردازه‌های دیگر انتخاب نکنید؛ هدف این تمرین آشنایی با کنترل همان کارِ ساخته‌شده است.

bash
kill -TERM "$practice_pid"
wait "$practice_pid"
jobs -l
unset practice_pid

این بخش را بلافاصله پس از مشاهدهٔ sleep اجرا کنید. kill نامی تاریخی دارد؛ در واقع سیگنال می‌فرستد. TERM درخواست پایان است و به برنامه امکان رسیدگی و جمع‌کردن کارها را می‌دهد، هرچند همهٔ برنامه‌ها الزاماً یکسان پاسخ نمی‌دهند. wait تا پایان همان فرزند شل صبر می‌کند؛ برای sleep پایان‌یافته با سیگنال ممکن است پیام Terminated و وضعیت خروج غیرصفر دیده شود. پس از پایان، آن کار دیگر در فهرست فعال jobs نیست. پایان اجباری با سیگنال KILL فرصت رسیدگی نمی‌دهد و راه‌حل پیش‌فرض درس نیست؛ برای این آزمایش لازم نیست.

دیسک با حافظه فرق دارد

bash
df -h .
du -sh .
free -h

این فرمان‌ها را در یک پوشهٔ کوچک تمرینی اجرا کنید. df ظرفیت و فضای مصرف‌شدهٔ فایل‌سیستمی را می‌دهد که پوشهٔ فعلی روی آن است. du مصرف فضای فایل‌های همین پوشه و زیرپوشه‌ها را برآورد می‌کند؛ گزینهٔ s یک جمع و h واحدهای خواناتر می‌دهد. این دو عدد قرار نیست یکسان باشند. free وضعیت RAM و فضای کمکی swap را نشان می‌دهد. ستون available برآورد مفیدتری برای آغاز برنامه‌های تازه است؛ لینوکس از RAM برای کش هم استفاده می‌کند، پس کوچک‌بودن free به‌تنهایی اثبات کمبود حافظه نیست.

تمرین و پاسخ توضیحی

تمرین: فقط روی sleep خودتان آزمایش پس‌زمینه و پایان را انجام دهید. سپس بگویید برای فهمیدن فضای خالی دیسک از کدام فرمان استفاده می‌کنید و آیا PID و شمارهٔ job یک چیزند. پاسخ: df -h . فضای فایل‌سیستم را گزارش می‌کند؛ free دربارهٔ حافظه است و du اندازهٔ مجموعهٔ فایل‌ها را برآورد می‌کند. PID شناسهٔ پردازه و شمارهٔ job مرجع شل فعلی است. اگر jobs پس از آزمایش خالی شد، تنها می‌دانیم شل فعلی دیگر آن کار فعال را ندارد؛ این نتیجه دربارهٔ نبودن همهٔ پردازه‌های سیستم نیست.

منابع رسمی و مطالعهٔ تکمیلی

https://manpages.debian.org/trixie/procps/ps.1.en.html
https://manpages.debian.org/trixie/procps/top.1.en.html
https://www.gnu.org/s/bash/manual/html_node/Job-Control-Basics.html
https://www.gnu.org/software/bash/manual/html_node/Job-Control-Builtins.html
https://www.gnu.org/s/bash/manual/html_node/Signals.html
https://www.gnu.org/s/coreutils/manual/html_node/df-invocation.html

تألیف و مثال‌های اختصاصی: تحریریه درس‌آوند. منابع انگلیسی برای بررسی مفاهیم و مطالعهٔ تکمیلی معرفی شده‌اند.

ورود برای ثبت پیشرفت

متن درس‌های عمومی را بدون ورود بخوانید.

یادگیری‌ات را دنبال کن

برای نگهداری پیشرفت و ادامهٔ یادگیری از حساب خود استفاده کن.

ورود و ثبت‌نام
دربارهٔ این دوره

آموزش رایگان لینوکس مقدماتی با ۱۹ درس فارسی، تصاویر اختصاصی، تمرین و پاسخ؛ از ترمینال و VPS تا SSH در ویندوز و موبایل و پروژهٔ پشتیبان‌گیری.

پرسشی دربارهٔ این درس داری؟گفت‌وگو با پشتیبانی در حساب کاربری
یکجا انتخاب کن، راحت‌تر دریافت کن

انتخاب‌های من ۰ منبع

مجموعهٔ مطالعه‌ات را بساز.

کنار مقاله‌ها «انتخاب» را بزنید تا چند فایل را با هم دریافت کنید.

انتخاب مقاله‌های رایگان