پیدا کردن تعداد فرایندهای در حال اجرا و بلاک شده در لینوکس

فرایند زمانی در حال اجرا (Running) است که پردازنده را در اختیار داشته باشد. زمانی که یک فرایند در خال انجام عملیات I/O مانند خواندن/نوشتن از/بر روی دیسک باشد، از حالت اجرا خارج شده و به حالت بلاک شده (Blocked) می رود. پس از تکمیل عملیات I/O فرایند برای اجرا شدن باید درون صف آماده (Ready Queue) که در حافظه اصلی است قرار گیرد.

در لینوکس از خروجی دستور top می توان تعداد فرایندهای در حال اجرا و تعداد فرایندهای بلاک شده را پیدا کرد. در خروجی دستور top عدد جلوی running تعداد فرایندهای در حال اجرا و عدد جلوی stopped تعداد فرایندهای بلاک شده را نشان می دهد. زمانی که در حین اجرای یک دستور در خط فرمان کلید های Ctrl+Z را کلیک کنید، یک عدد به فرایندهای بلاک شده اضافه می شود.

linux_cpu_status

فایل proc/stat/ 

از فایل proc/stat/ نیز می توان تعداد فرایندهای در حال اجرا و بلاک شده را پیدا کرد. اطلاعات مختلفی در مورد فعالیت هسته سیستم عامل لینوکس درون فایل proc/stat/ قرار دارند. تمامی اعدادی که درون این فایل قرار دارند از زمان اولین بوت شدن سیستم جمع آوری شده اند.

مطابق شکل زیر خط اول که با cpu آغاز می شود و دارای ۱۰ ستون است، اطلاعات جمع آوری شده از n خط بعدی است که با cpun آغاز می شوند. n برابر تعداد پردازنده های متصل به سیستم است. بنابراین اگر دو پردازنده داشته باشیم، آنگاه دو خط در زیر خط cpu داریم که با cpu0 و cpu1 آغاز می شوند. خط اول که به cpu آغاز می شود مجموع دو خط بعدی خواهد بود که با cpu0 و cpu1 آغاز شده اند. تمامی اعداد زیر نشان دهنده میزان زمان صرف شده برای اجرای یک فرایند بر حسب ثانیه در یک حالت خاص هستند.

  • ستون اول : نشان دهنده میزان زمان صرف شده برای اجرای فرایندها در فضای کاربر است که به صورت عادی اجرا شده اند.
  • ستون دوم : نشان دهنده میزان زمان صرف شده برای اجرای فرایندها در فضای کاربر است که با دستور nice تغییر اولویت داده شده اند.
  • ستون سوم : نشان دهنده میزان زمان صرف شده برای اجرای فرایندها در فضای هسته است.
  • ستون چهارم : نشان دهنده میزان زمان بی کار (Idle) پردازنده است.
  •  ستون پنجم : نشان دهنده میزان زمان صرف شده برای انجام یک عملیات I/O است که پردازنده در انتظار تکمیل شدن آن عملیات می ماند.
  • ستون ششم : نشان دهنده میزان زمان صرف شده برای سرویس دهی وقفه های سخت افزاری است.
  • ستون هفتم : نشان دهنده میزان زمان صرف شده برای سرویس دهی وقفه های نرم افزاری است.
  • ستون هشتم : نشان دهنده انتظارهای غیر ارادی (Involuntary Wait) است.
  • ستون نهم : نشان دهنده میزان زمان صرف شده برای اجرای یک Guest نرمال است.
  • ستون دهم : نشان دهنده میزان زمان صرف شده برای اجرای یک Guest  تغییر اولویت داده شده است.

ستون اول معادل ستون us، ستون دوم معادل ستون sy، ستون سوم معادل ستون ni، ستون چهارم معادل ستون id، ستون پنجم معادل ستون wa، ستون ششم معادل hi، ستون هفتم معادل ستون si، ستون هشتم معادل ستون st در خروجی دستور top نیست، چون دستور top وضعیت لحظه ای را نشان می دهد، ولی این ستون ها از زمان اولین بوت شدن سیستم تا به حال جمع آوری شده اند.

خروجی دستور top برای زمان مصرفی پردازنده

linux_running_blocked_process2

خطی که با intr آغاز می شود تعداد وقفه های سخت افزاری سرویس دهی شده از زمان بوت شدن سیستم را نشان می دهد. خط ctxt تعداد کل تعویض متن (Contxt Switch) در تمامی پردازنده ها را نشان می دهد. خط btime زمانی را نشانمی دهد که سیستم در آن بوت شده است. خط processes تعداد فرایندها و نخ ها (Threads) را نشان می دهند که تا به حال ایجاد شده اند. ایجاد شدن این فرایندها توسط فراخوان های سیستمی ()fork و ()clone است.

خط proc_running معادل running در خروجی دستور top است که تعداد نخ های (فرایندهای) در حال اجرا (Running) یا آماده برای اجرا (Runnable) را نشان می دهد. فرایندی در حال اجرا است که پردازنده را در اختیار دارد و فرایندی آماده اجرا است که تمامی منابع به جز پردازنده را در اختیار دارد و درون صف آماده (Ready Queue) در حافظه اصلی قرار دارد. خط proc_blocked تعداد فرایندهایی را نشان می دهد که در حال حاظر به علت در انجام عملیات I/O بلاک شده اند. خط softirq نیز عداد وقفه های سخت افزاری سرویس دهی شده از زمان بوت شدن سیستم را نشان می دهد.