۴
(۴)

Processesها قلب تپنده هر سیستم‌عامل، به‌ویژه لینوکس، هستند. هر بار که دستوری اجرا می‌کنید یا برنامه‌ای باز می‌کنید، یک یا چند فرآیند ایجاد می‌شود که وظیفه اجرای آن عملیات را بر عهده دارند. اما مدیریت این فرآیندها تنها محدود به اجرای دستورات ساده نیست؛ مفاهیمی مانند فرآیندهای والد و فرزند، حالت‌های مختلف (Running، Sleeping، Zombie) و ابزارهایی برای نظارت و کنترل، بخشی از این دنیای پیچیده هستند. در این مقاله، با نگاهی عمیق‌تر، چرخه حیات فرآیندها، ابزارهای پیشرفته برای مدیرت Process‌ها در لینوکس و نحوه بهینه‌سازی سیستم از طریق کنترل فرآیندها را بررسی می‌کنیم. آماده باشید تا پرده از رازهای عملکرد سیستم لینوکس بردارید!

فهرست مطالب

فرآیند (Process) چیست؟

Process ها برنامه‌های در حال اجرا هستند که سیستم‌عامل اولویت بندی، زمان‌بندی اجرا، تخصیص منابع و نظارت بر عملکرد آنها را مدیریت می‌کند.

شناسه های کلیدی Process‌ها در لینوکس:

  1. PID یا Process ID: شناسه یکتای فرآیند.
  2. PPID یا Parent Process ID: شناسه فرآیند والد که آن را ایجاد کرده است.

انواع Process و حالت های آن در لینوکس

۱. Foreground Processes:

فرآیندهایی که مستقیماً با کاربر در ارتباط هستند. مثلا وقتی یک دستور در ترمینال اجرا می‌کنید.

    • برای اجرا کردن یک فرآیند در Foreground از دستور زیر استفاده می کنیم:
fg %job-id

۲. Background Processes:

فرآیندهایی که در پس‌زمینه اجرا می‌شوند و نیازی به تعامل مستقیم باکاربر ندارند.

    • برای بردن یک دستور در Background از دستور زیر استفاده می کنیم:
command &

۳. فرآیندهای در حال اجرا (Running):

    • به معنی این است که فرآیند روی CPU در حال اجرا یا آماده اجرا می‌باشد.
    • این حالت معمولاً با حرف R نشان داده صمی‌شود.
    • فرآیندهایی که در صف اجرا قرار دارند نیز ممکن است در این حالت باشند.
    • Idle: فرآیند در حال اجراست، اما هیچ کاری انجام نمی‌دهد که با حرف I نشان داده میشود.

۴. Sleeping (در حالت خواب)

    • فرآیندی که منتظر یک رویداد خارجی (مانند ورودی/خروجی) است.
    • دو نوع حالت خواب وجود دارد:
      1. Interruptible Sleep (خواب قابل قطع):
        • فرآیند می‌تواند با سیگنال‌ها بیدار شود.
        • با حرف S نشان داده می‌شود.
      2. Uninterruptible Sleep (خواب غیرقابل قطع):
        • فرآیند نمی‌تواند با سیگنال بیدار شود (معمولاً در انتظار عملیات I/O است).
        • با حرف D نشان داده می‌شود.

۵. Stopped (متوقف شده)

    • فرآیندی که متوقف شده است، معمولاً به دلیل دریافت سیگنال‌هایی مانند SIGSTOP یا در هنگام دیباگ شدن.
    • این حالت با حرف T نشان داده می‌شود.

۶. فرآیندهای زامبی (Zombie Processes):

    • فرآیندهایی که به اتمام رسیده‌اند اما هنوز اطلاعاتی در مورد آن‌ها در جدول فرآیندها باقی مانده است. این فرآیندها معمولاً به دلیل مشکلات مدیریت فرآیند والد باقی می‌مانند.
    • این حالت با حرف Z نشان داده می‌شود.

۷. فرآیندهای یتیم (Orphan Processes):

فرآیندهایی که والد آن‌ها قبل از اتمام فرآیند فرزند از بین رفته است. سیستم‌عامل این فرآیندها را به فرآیند Init یا Systemd واگذار می‌کند.

وضعیت فرآیندهای یتیم معمولاً با همان حالت‌های استاندارد مانند R (Running) یا S (Sleeping) نشان داده می‌شود، زیرا “یتیم بودن” یک وضعیت اجرایی نیست، بلکه به ارتباط فرآیند با والد آن مربوط است.

۸. Dead (مرده)

    • فرآیندی که به پایان رسیده است و دیگر در جدول فرآیندها وجود ندارد.

کاراکترهای فرعی برای نمایش Processها:

کاراکترهای دیگری ممکن است در کنار وضعیت اصلی ظاهر شوند و جزئیات بیشتری ارائه دهند:

    • <: فرآیند دارای اولویت بالا است (High-Priority).
    • N: فرآیند دارای اولویت پایین است (Low-Priority).
    • L: فرآیند دارای صفحات قفل شده در حافظه است.
    • s: فرآیند یک رهبر گروه است (Session Leader).
    • l: فرآیند در حالت چند رشته‌ای (Multi-threaded) است.
    • +: فرآیند به یک ترمینال متصل است (Foreground Process).

دستورات مهم برای مدیریت Process‌ها در لینوکس

۱. نمایش Process‌ها در لینوکس

  • دستور top: برای نمایش فرآیندهای در حال اجرا به صورت لحظه ای یا Real-Time میباشد، یعنی خروجی این دستور به صورت مداوم refresh می شود، مانند: Task Manager ویندوز.

    1. Uptime: مدت زمانی که سیستم روشن بوده.
    2. Users: مشخص کننده تعداد یوزرهایی است که به سیستم Login هستند. 
    3. Load Average: مشخص کننده میزان Cpu Load در بازه های زمانی ۱۵ , ۵ , ۱ دقیقه. 
    4. Tasks: تعداد Taskها در حالت:کلی، Run، Sleep، Stop، Zombie.
    5. %CPU:  مشخص کننده CPU Utilization می باشد:
      • us مخفف user: درصد اشغال CPU که صرف برنامه های کاربر هستند.
      • sy مخفف system:  درصد اشغال CPU که صرف اجرای فرآیندهای سیستمی هستند، مثال: دسترسی به سخت‌افزار یا اجرای درایورها.
      • ni مخفف nice:  درصد اشغال CPU که صرف فرآیندهایی با اولویت پایین (nice) شده، مثال: اجرای فرآیند پشتیبان‌گیری (با priority کم).
      • id مخفف idle:  درصد اشغال CPU زمانی که CPU بیکار است و هیچ فرآیندی اجرا نمی‌شود، مثال: ۹۸% بیکار (Idle) به معنی کم‌بودن فشار کاری روی سیستم است.
      • wa مخفف wait:  درصد اشغال CPU که صرف انتظار برای عملیات I/O (دیسک یا شبکه) می باشد، مثال: فرآیند در حال انتظار برای نوشتن روی دیسک یا دریافت داده از شبکه.
      • hi مخفف hardware interrupt:  درصد اشغال CPU که صرف وقفه‌های سخت‌افزاری شده، مثال: رسیدگی به سیگنال‌های سخت‌افزاری مثل صفحه‌کلید یا کارت شبکه.
      • si مخفف software interrupt:  درصد اشغال CPU که صرف وقفه‌های نرم‌افزاری شده، مثال: سرویس‌دهی به سیگنال‌های نرم‌افزاری از برنامه‌ها.
      • st مخفف steal time:  درصد اشغال CPU که به دلیل استفاده CPU توسط ماشین مجازی دیگر (در محیط‌های مجازی‌سازی) از دست رفته، مثال: در سرورهای مجازی، وقتی هایپروایزر منابع را به ماشین‌های دیگر تخصیص می‌دهد.
    6. Mem: مشخص کننده Physical Memory Utilization می باشد، هر مقدار به درصد استفاده از CPU در یک حالت خاص اشاره دارد. توضیح مختصر هر پارامتر:
      • buff/cache به مقدار حافظه‌ای اشاره دارد که توسط بافرها (buffers) و کش‌ها (caches) استفاده شده است. که این حافظه، برای برنامه‌ها در دسترس نیست، اما می‌تواند در صورت نیاز آن را آزاد نمود.
      • buffers: بخشی از RAM که برای ذخیره موقت داده‌ها استفاده می‌شود، قبل از آنکه این داده‌ها روی دیسک نوشته شوند، مثال: زمانی که فایل‌ها در حال نوشتن روی هارددیسک هستند، ابتدا در بافر ذخیره می‌شوند تا عملیات نوشتن سریع‌تر شود.
      • cache: بخشی از RAM که برای ذخیره داده‌هایی که اخیراً یا مکرراً استفاده شده‌اند به کار می‌رود. هدف این است که دسترسی به داده‌ها سریع‌تر انجام شود.
      • نکته: لینوکس از حافظه RAM به طور بهینه استفاده می‌کند، حتی اگر مقدار زیادی از آن در کش باشد. این رفتار طبیعی است و به معنی کمبود حافظه نیست.
    7. Swap: مشخص کننده Virtual Memory Utilization می باشد، برای دیدین جزئیات RAM Utilitization بهتر است از ابزار free -m استفاده کنید. 
    8. PID: مشخص کننده Process ID User می باشد. 
    9. یوزری که Process را اجرا کرده است. 
    10. PR مخفف Priority: نشان‌دهنده اولویت زمان‌بندی فرآیندها توسط کرنل می باشد.
    • rt: مخفف Real-Time فرآیندهایی با زمان‌بندی بلادرنگ.
    • مقادیر عددی: که اولویت با مقادیر پایین‌تر است: مثل ۰، ۱۰ یا ۲۰.

۱۱. NI مخفف Nice Value:  نشان‌دهنده تعیین یا تغییر اولویت فرآیند توسط کاربر میباشد:

      • -۲۰: فرآیند دارای بالاترین اولویت.
      • +۱۹: فرآیند دارای کمترین اولویت.
      • با دستور renice: کاربر می تواند اولویت فرآیند را تغییر دهد.
      •  VIRT مخفف Virtual Memory Size: نشان‌دهنده کل حافظه مجازی تخصیص‌یافته به هر فرآیند است، شامل: حافظه واقعی (RAM)، حافظه Swap و حافظه رزرو شده (Reserved Memory).
      • واحد اندازه‌گیری: کیلوبایت (KB) یا مگابایت (MB).
      • این مقدار نشان می‌دهد که هر فرآیند چه مقدار از فضای آدرس‌دهی خود را استفاده می‌کند.

۱۲. RES مخففResident Memory: مقدار حافظه واقعی (RAM) که فرآیند استفاده می‌کند.

      • این مقدار شامل حافظه مشترک نمی‌شود.
      • واحد اندازه‌گیری: کیلوبایت (KB) یا مگابایت (MB).

۱۳. SHR مخفف Shared Memory: مقدار حافظه فرآیند که با دیگر فرآیندها به اشتراک گذاشته شده است، شامل:کتابخانه‌های مشترک (Shared Libraries) و بخش‌هایی از حافظه که فرآیند با دیگر فرآیندها به اشتراک گذاشته است.

      •  این مقدار در RES لحاظ شده، اما کل RES حافظه مختص فرآیند نیست.

۱۴.S مخفف Status: وضعیت هر Process را نشان میدهد: 

      • R: Running (در حال اجرا یا آماده اجرا روی CPU).
      • S: Sleeping (در انتظار یک رویداد یا منبع).
      • D: Disk Sleep (در انتظار I/O دیسک).
      • T: Stopped (متوقف شده).
      • Z: Zombie (فرآیند زامبی).

۱۵.CPU%: درصد استفاده هر فرآیند از CPU.

۱۶.MEM%: درصد استفاده هر فرآیند از Memory.

۱۷.Command: نام پروسس مورد نظر می باشد. 

۱۸. برای خارج شدن از محیط top میتوانید از کلید q استفاده کنید. 

  • htop: نسخه پیشرفته‌تر top با رابط کاربری تعاملی.

  • ps: مخفف Process: که لیستی از فرآیندهای فعال کاربر جاری که در ترمینال جاری اجرا می‌شوند را نشان میدهد، مانند:

    processes-in-linux-ps

    1. PID: شماره شناسایی فرآیند.
    2. TTY: ترمینال متصل به فرآیند.
    3. TIME: زمان CPU استفاده‌شده توسط فرآیند.
    4. CMD: دستوری که فرآیند را اجرا کرده است.
    • آپشن ef- و دستور ps: ترکیبی از e و f هستند که هر کدام وظیفه خاصی دارند. به طور خاص:
      • e مخفف “every process” برای نمایش تمام فرآیندهای موجود در سیستم.
      • f مخفف “full-format listing”: برای نمایش فرآیندها در قالب کامل، مانند: والد فرآیند (PPID)، کاربری که فرآیند را اجرا کرده (UID)، و سلسله مراتب فرآیندها به صورت درختی (Tree Structure).
      • C مخفف CPU Utilization: درصد استفاده از CPU توسط هر فرآیند، مثال: ۰: یعنی فرآیند در حال استفاده از CPU نیست؛ ۵۰: یعنی فرآیند در حال استفاده از ۵۰ درصد از یک هسته CPU است.
      • STIME مخفف Start Time: نمایش زمان یا تاریخ شروع فرآیند.
      • TTY: برای شناسایی ترمینالی که فرآیند در آن اجرا شده است،
      • ?: فرآیند به هیچ ترمینالی متصل نیست (مثلاً فرآیندهای سیستمی).
      • pts/0: فرآیند به یک ترمینال مجازی (Pseudo Terminal) مانند یک جلسه SSH متصل است.
      • TIME: مقدار زمانی که فرآیند از CPU استفاده کرده است، مثال: ۰۰:۰۰:۰۲: فرآیند فقط ۲ ثانیه از CPU استفاده کرده است.
      • CMD مخفف Command: رای شناسایی فرآیندها بر اساس دستور یا برنامه‌ای که آن را اجرا کرده است، مثال:
      • /sbin/init: دستور شروع فرآیند init.
      • /usr/bin/python3 my_script.py: اجرای یک اسکریپت پایتون.processes-in-linux-ps-ef-gerp
      • grep و دستور ps: اگر بعد از دستور ps از  grep |  استفاده کنیم و در انتها نام سرویس مورد نظر را وارد کنیم، خروجی دستور ps فیلتر شده و فقط پروسس های سرویس مورد نظر نمایش داده میشود.
        • با استفاده مجدد از دستور grep و سوئیچ v- (مخفف invert)می توانیم یک سرویس رو فیلتر کنیم مثلا از بین پراسس های آپاچی، همه پراسس های نمایش داده شوند به جز پراسس های مربوط به grep.
          processes-in-linux-ps-ef-gerp-v
    • آپشن aux و دستور ps: تمام فرآیندهای سیستم با جزئیات کامل، چه به ترمینال متصل باشند را ارائه می دهد، شبیه به ابزار top می ماند با این تفاوت که خروجی آن ثابت است و Refresh نمی شود. 
      • USER: نام کاربری مالک فرآیند.
      • PID: شماره شناسایی فرآیند (Process ID).
      • %CPU: درصد استفاده از CPU توسط فرآیند.
      • %MEM: درصد استفاده از حافظه توسط فرآیند.
      • VSZ: میزان حافظه مجازی مورد استفاده (Virtual Memory Size).
      • RSS: میزان حافظه فیزیکی مورد استفاده (Resident Set Size).
      • TTY: ترمینال مرتبط با فرآیند (یا ? برای فرآیندهای بدون ترمینال).
      • STAT: وضعیت فرآیند (Running, Sleeping, Zombie و …).
      • START: زمان شروع فرآیند.
      • TIME: کل زمان CPU استفاده شده توسط فرآیند.
      • COMMAND: دستور یا برنامه‌ای که فرآیند را اجرا کرده است.processes-in-linux-ps-aux

۲. مدیریت Process‌ها در لینوکس

  • kill: برای خاتمه دادن به یک فرآیند بعد از این دستور PID فرآیند مورد نظر را وارد میکنیم.

    • اگر فرآیند فرزند (Child Process) خاتمه یابد، والد (Parent Process) تحت تأثیر قرار نمی‌گیرد.
    • اما اگر فرآیند والد (Parent Process) خاتمه پیدا کند، معمولاً فرآیندهای فرزند یتیم (orphaned) می‌شوند. این فرآیندهای یتیم توسط فرآیند init (یا در سیستم‌های جدیدتر systemd) مدیریت خواهند شد و به حیات خود ادامه می‌دهند.
kill PID
  • killall: خاتمه دادن به تمام فرآیندهایی که نام مشخصی دارند حتی فرآیندهای فرزند.

killall process-name
  • SIGKILL: خاتمه فوری فرآیند، بدون فرصت برای ذخیره یا خاتمه صحیح فرآیندها، با دستور kill و سوئیچ ۹-.

kill -9 PID
  • SIGTERM: درخواست خاتمه فرآیند به روشی ملایم، با دستور kill و سوئیچ ۱۵-.
kill -15 PID
  • SIGHUP: راه‌اندازی مجدد فرآیند، با دستور kill و سوئیچ ۱-.
kill -1 PID
  • nice:  برای تعیین اولویت فرآیند جدید در هنگام اجرااستفاده می‌شود، این دستور نیاز به command یا نام دستور یا برنامه مثلا gzip file.txt.
    • مقدار n- نشان‌دهنده nice value است که بین -۲۰ (بالاترین اولویت) تا ۱۹ (پایین‌ترین اولویت) قرار دارد. مقدار پیش‌فرض ۰ است.
nice -n 10 command
  • renice: برای تغییر اولویت فرآیند در حال اجرا استفاده می‌شود، برای اجرا نیاز به PID (شناسه فرآیند) دارد.
    • مقدار n- نشان‌دهنده nice value است که بین -۲۰ (بالاترین اولویت) تا ۱۹ (پایین‌ترین اولویت) قرار دارد. مقدار پیش‌فرض ۰ است.
renice -n 5 PID

۳. نظارت بر Process‌ها در لینوکس

  • strace: نظارت بر عملکرد فرآیندها و بررسی فراخوانی‌های سیستمی.

strace -p PID
  • lsof: مشاهده فایل‌های باز شده توسط یک فرآیند.

lsof -p PID

۴.عیب‌یابی Process‌ها در لینوکس

برای رفع مشکلات فرآیندها می‌توانید از ابزارهای زیر استفاده کنید:

  • journalctl: مشاهده لاگ‌ها و بررسی خطاهای مرتبط با فرآیند.

journalctl -u service-name
  • dmesg: بررسی پیام‌های کرنل برای مشکلات فرآیندها.

dmesg

نتیجه‌گیری:

مدیریت Process‌ها در لینوکس یکی از وظایف کلیدی کاربران و مدیران سیستم است. تسلط بر ابزارها و دستورات مرتبط با فرآیندها به شما کمک می‌کند تا عملکرد سیستم را بهینه کرده، مشکلات را رفع کنید و منابع را به بهترین شکل ممکن مدیریت نمایید. با استفاده از دستورات و مفاهیمی که در این مقاله بیان شد، می‌توانید فرآیندهای لینوکس را به‌صورت حرفه‌ای مدیریت کنید.

چقدر این مطلب مفید بود؟

روی یک ستاره کلیک کنید تا به آن امتیاز دهید!

میانگین امتیاز ۴ / ۵. تعداد آرا: ۴

تا الان رای نیامده! اولین نفری باشید که به این پست امتیاز می دهید.