جلسه 8 مدیریت پراسس ها و انواع پراسس ها در لینوکس،
مقدمه: فرآیند چیست؟
- تیتر: تعریف فرآیند و اهمیت آن
- شرح:
- فرآیند (Process) چیست؟ (نمونه در حال اجرای یک برنامه)
- تفاوت فرآیند و برنامه (Program)
- چرا مدیریت فرآیندها مهم است؟ (بهینهسازی منابع، رفع اشکال، امنیت)
- مفاهیم پایه: PID (Process ID)، PPID (Parent Process ID)
۲. انواع فرآیندها در لینوکس
تیتر: طبقهبندی فرآیندها
شرح:
فرآیندهای Foreground (پیشزمینه): فرآیندهایی که مستقیماً با کاربر در تعامل هستند و خروجی خود را در ترمینال نمایش میدهند.
فرآیندهای Background (پسزمینه): فرآیندهایی که در پسزمینه اجرا میشوند و منابع سیستم را مصرف میکنند بدون اینکه مستقیماً با کاربر در تعامل باشند. (نحوه اجرای دستورات در پسزمینه با
&)
فرآیندهای Orphan (یتیم): فرآیندهایی که والد آنها (Parent Process) خاتمه یافته است. این فرآیندها توسط فرآیند
init(یاsystemdدر سیستمهای جدیدتر با PID 1) به سرپرستی گرفته میشوند.
فرآیندهای Zombie (زامبی): فرآیندهایی که اجرا شدهاند، اما والد آنها هنوز وضعیت خروجشان را نخوانده است. این فرآیندها فضای کمی از حافظه را اشغال میکنند اما شناسه فرآیند (PID) آنها همچنان در جدول فرآیندها باقی میماند.
مثال:
اجرای یک دستور طولانی مانند
sleep 60بدون&(Foreground)
اجرای همان دستور با
sleep 60 &(Background)
نشان دادن فرآیند
initبا PID 1.
۳. مشاهده فرآیندها با دستور ps
تیتر: بررسی وضعیت فرآیندها
شرح:
دستور
psچیست و چه اطلاعاتی نمایش میدهد؟
آپشنهای پرکاربرد
ps:
ps aux: نمایش تمام فرآیندهای در حال اجرا در سیستم، همراه با جزئیات کامل (شامل کاربران، CPU، حافظه و …)
ps -ef: نمایش تمام فرآیندها در یک فرمت استاندارد POSIX.
ps -u <username>: نمایش فرآیندهای یک کاربر خاص.
ps -p <PID>: نمایش جزئیات یک فرآیند خاص با شناسه آن.
تفسیر ستونهای خروجی
ps(USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND)
معنی وضعیتهای فرآیند (STAT): R (Running), S (Sleeping), D (Disk Sleep), Z (Zombie), T (Stopped), X (Dead).
مثال:
اجرای
ps aux | headبرای دیدن چند فرآیند اول.
اجرای
ps -ef | grep sshdبرای پیدا کردن فرآیندهای مرتبط باsshd.
اجرای
ps -p 1برای دیدن فرآیندinit.
۴. جستجوی فرآیندها با دستور pgrep
تیتر: یافتن سریع فرآیندها بر اساس نام یا ویژگیها
شرح:
دستور
pgrepچیست و چه زمانی استفاده میشود؟ (جایگزینی سادهتر برایps | grep)
نحوه جستجو بر اساس نام فرآیند:
pgrep <process_name>
آپشنهای پرکاربرد
pgrep:
-l: نمایش نام فرآیند همراه با PID.
-u <username>: جستجو در بین فرآیندهای یک کاربر خاص.
-f: جستجو در کل خط فرمان (Command Line) فرآیند، نه فقط نام آن.
-x: تطابق دقیق نام فرآیند.
مثال:
pgrep bash(یاpgrep -l bash)
pgrep -u root systemd
pgrep -f "python my_script.py"
۵. خاتمه دادن به فرآیندها با دستور kill
تیتر: کنترل و توقف فرآیندها
شرح:
دستور
killچیست و چگونه کار میکند؟ (ارسال سیگنال به فرآیندها)
مفهوم سیگنالها در لینوکس (Signals)
سیگنالهای رایج:
SIGTERM(15): سیگنال پیشفرض، درخواست خاتمه مودبانه (به فرآیند فرصت ذخیره اطلاعات و بستن امن را میدهد).
SIGKILL(9): سیگنال خاتمه اجباری (فرآیند بلافاصله و بدون فرصت ذخیره خاتمه مییابد).
SIGHUP(1): معمولاً برای بارگذاری مجدد پیکربندی سرویسها استفاده میشود.
نحوه استفاده از
kill:
kill <PID>(ارسال SIGTERM به صورت پیشفرض)
kill -9 <PID>(ارسال SIGKILL)
kill -l(نمایش لیست تمام سیگنالها)
kill -<signal_number> <PID>
دستور
pkill: مشابهpgrepکه فرآیندها را پیدا کرده و سپس سیگنال ارسال میکند (مثلاًpkill -9 nginx).
مثال:
اجرای یک دستور در پسزمینه (مثلاً
sleep 300 &).
پیدا کردن PID آن با
pgrep sleep.
خاتمه دادن به آن با
kill <PID>.
اگر پاسخ نداد، با
kill -9 <PID>اجبار به خاتمه.
مثال
pkill -f "my_process_name"
۶. خلاصه نکات کلیدی
- تیتر: مروری بر مفاهیم و دستورات مهم
- شرح:
- فرآیند، نمونه اجرایی یک برنامه است که دارای PID و PPID میباشد.
- فرآیندها به Foreground و Background تقسیم میشوند.
- فرآیندهای Orphan و Zombie وضعیتهای خاصی هستند که باید شناسایی شوند.
psبرای مشاهده جزئیات فرآیندها با آپشنهای مختلف (مانندaux,-ef) به کار میرود.pgrepبرای یافتن سریع PID فرآیندها بر اساس نام یا الگوی خط فرمان استفاده میشود.killبرای ارسال سیگنال به فرآیندها جهت کنترل یا خاتمه آنها به کار میرود.SIGTERM(9) سیگنال خاتمه مودبانه وSIGKILL(9) سیگنال خاتمه اجباری است.pkillراهی سریع برای یافتن و ارسال سیگنال به فرآیندها به صورت همزمان است.
۷. تمرینهای پایان فصل
- تیتر: ارزیابی آموختهها
- شرح:
- یک دستور ساده مانند
while true; do echo "Hello"; sleep 1; doneرا در پسزمینه اجرا کنید. - با استفاده از
psوgrep(یاpgrep)، PID این فرآیند را پیدا کنید. - ابتدا سعی کنید فرآیند را با سیگنال
SIGTERMخاتمه دهید. آیا موفق شدید؟ - اگر فرآیند هنوز در حال اجراست، آن را با سیگنال
SIGKILLخاتمه دهید. - فرآیندهایی که متعلق به کاربر
rootهستند اما نامشان شاملdاست را لیست کنید. - دستور
htop(در صورت نصب بودن) را اجرا کنید. این ابزار چه تفاوتهایی باpsدارد؟ (توضیح کوتاه) - یک فرآیند زامبی (Zombie Process) چگونه میتواند ایجاد شود؟ (توضیح مفهومی