درک فرآیندهای لینوکس از طریق Scratch |

8 دقیقه

هنگام شروع برنامه یا فرمان ، یک فرایند در حافظه ایجاد می شود.

این است یک شماره شناسایی منحصر به فرد ، که به عنوان شناسه فرآیند (PID) شناخته می شود ، اختصاص داده می شود ، که توسط هسته برای کنترل یک فرایند استفاده می شود تا زمانی که برنامه یا فرمان با آن خاتمه یابد.

به عنوان مثال ، هنگامی که کاربر وارد سیستم می شود ، یک پوسته (که یک فرآیند است) شروع می شود.

🐧 راهنمای اساسی توسط فرآیند بوت لینوکس

به همین ترتیب ، هنگامی که یک کاربر دستور را اجرا می کند یا برنامه ای را باز می کند ، یک فرایند ایجاد می شود.

بنابراین ، یک فرایند هر برنامه ای است ، برنامه یا فرمان اجرا شده بر روی سیستم.

هنگام بوت شدن سیستم ، چندین فرایند ایجاد می شود که بسیاری از آنها در حافظه می مانند و منتظر رویدادی هستند که درخواست استفاده از خدمات آنها را برانگیزد.

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

View Processes

دو دستور معمولاً برای مشاهده فرآیندهای در حال اجرا استفاده می شود.

اینها ps (وضعیت فرآیند) و بالا هستند.

فرمان ps بدون هیچ گونه گزینه یا استدلالی ، فرآیندهای خاص ترمینال را که این فرمان در آن اجرا می شود ، فهرست می کند:

 $ ps
CMD PID TTY TIME
17655 امتیاز / 0 00:00:00 bash
17703 pts / 0 00:00:00 ps 

خروجی دارای چهار ستون است که PID فرآیند را در ستون اول ، پایانه ای که فرآیند در ستون دوم به آن تعلق دارد ، نشان می دهد ، کل زمان اجرای فرآیند توسط پردازنده سیستم در ستون سوم ، و نام واقعی فرمان یا برنامه اجرایی در ستون آخر.

دو گزینه -e (هر) و -f (کامل ) اغلب برای به دست آوردن اطلاعات دقیق در مورد هر فرایندی که روی سیستم اجرا می شود استفاده می شود.

تعدادی گزینه اضافی با فرمان ps موجود است.

برای جزئیات به صفحات مرد مراجعه کنید.

 $ ps -ef
UID PID PPID C STIME TTY TIME CMD
ریشه 1 0 0 فوریه 04؟ 00:00:03 / sbin / init
ریشه 2 0 0 فوریه 04؟ 00:00:00 [kthreadd]
ریشه 3 2 0 فوریه 04؟ 00:00:01 [ksoftirqd/0]
ریشه 5 2 0 فوریه 04؟ 00:00:00 [kworker/0:0H]
ریشه 7 2 0 فوریه 04؟ 00:00:21 [rcu_sched]
ریشه 8 2 0 فوریه 04؟ 00:00:16 [rcuos/0]
..................... 

خروجی اطلاعات بیشتری در مورد فرآیندهای در حال اجرا نشان می دهد .

جدول زیر نوع محتویات هر ستون را توضیح می دهد.

سرصفحه توضیح
UID شناسه کاربر مالک فرآیند
PID شناسه فرآیند
PPID [19659028] شناسه فرآیند
C اولویت فرآیند
STIME زمان شروع فرآیند
TTY پایانه ای که فرآیند بر روی آن آغاز شده است. کنسول نماینده کنسول سیستم است ، درسته؟ نشان می دهد که این فرآیند یک شیطان است. خروجی ، در پس زمینه اجرا می شود که با هیچ پایانه ای مرتبط نیست.

همچنین به شماره های PID و PPID توجه کنید.

هر چه تعداد فرایند کمتر باشد ، زودتر شروع می شود.

روند PID 0 ابتدا در راه اندازی سیستم و سپس یک فرایند با PID 1 و غیره.

هر PID دارای یک PPID مربوطه در ستون سوم است.

صاحب هر فرآیند نیز به همراه نام فرمان یا برنامه نمایش داده می شود. [[19659006] اطلاعات مربوط به هر فرآیند در حال ذخیره و نگهداری در یک جدول پردازش ، که ps و سایر دستورات برای نمایش اطلاعات آنها را مطالعه می کند.

دومین راه برای مشاهده اطلاعات پردازش ، فرمان بالا است که CPU ، حافظه و na

در زیر نمونه ای از خروجی داده ها از یک جلسه در حال اجرا است:

 $ top 

q یا Ctrl + c را فشار دهید تا خروج از بالا.

علاوه بر فرمان بالا ، ابزارهای خط فرمان دیگری مانند htop و atop نیز وجود دارند که می توانند برای مشاهده اطلاعات در مورد فرآیندها ، حافظه و استفاده از پردازنده مورد استفاده قرار گیرند.

فهرست یک فرایند خاص [19659014] اگر نام آن را می دانید ، می توانید از دستور pidof برای فهرست PID یک فرایند خاص استفاده کنید. دستور را به صورت زیر اجرا کنید:

 $ pidof cron
1209 

تعریف فرایندها توسط مالکیت

فرآیندها را می توان با مالکیت یا عضویت در گروه لیست کرد.

این کار با استفاده از دستور pgrep انجام می شود.

🚿 نحوه گرفتن ستون از خروجی فرمان و تبدیل آن به string

📂 نحوه یافتن فهرست راهنمای فعلی یک فرآیند با استفاده از Pwdx در لینوکس

tools 5 ابزار مفید برای تشخیص نشت حافظه با مثال

به عنوان مثال ، برای لیست تمام فرایندهای متعلق به root ، از هر یک از دستورات زیر:

 # ps -U root
# pgrep -U root 

اولین فرمان فهرست PID ، TTY ، Time و نام فرآیند را برای کلیه فرایندهای در حال اجرا متعلق به root ، در حالی که pgrep فقط PID را لیست می کند.

با گزینه -G ، هر دو دستور همه فرایندها را فهرست می کنند. متعلق به گروه مشخص شده است.

مثال: لیست تمام فرایندهای متعلق به کاربر itsecforu

 $ ps -U itsecforu
  CMD PID TTY TIME
 2770؟ 00:00:00 gnome-keyring-d
 2772؟ 00:00:00 init
 2857؟ 00:00:00 ssh-agent
 2862؟ 00:00:03 dbus-daemon
 2870؟ 00:00:00 upstart-event-b
 2875؟ 00:00:00 window-stack-br
 2885؟ 00:00:00 upstart-file-br
 2887؟ 00:00:01 upstart-dbus-br
................................................ [19659072] فرآیند بیان می کند 

هنگامی که یک فرآیند تولید می شود ، به طور مداوم اجرا نمی شود.

ممکن است مدتی بیکار باشد یا منتظر بمانیم تا فرآیند دیگری اطلاعات را به آن ارسال کند تا بتواند به کار خود ادامه دهد.

آنجا پنج حالت فرآیند هستند و هر فرایند در هر زمان در یکی از آنها قرار دارد.

این حالتها در حال اجرا ، خوابیدن ، انتظار ، ] متوقف شد و zobmie - در زیر توضیح داده شده است:

  • اجرای نشان می دهد که این فرآیند در حال حاضر توسط پردازنده سیستم اجرا می شود.
  • وضعیت خوابیدن نشان می دهد که این روند در حال حاضر منتظر ورودی از طرف کاربر یا فرآیند دیگری است. 9659078] Stopped به این معنی است که فرآیند متوقف شده و حتی در زمان نوبت خود نیز اجرا نمی شود ، مگر اینکه سیگنالی به آن ارسال شود
  • زامبی حالت به این معنی است که این فرآیند مرده است. یک فرآیند زامبی در جدول فرآیند مانند سایر ورودی های فرآیند وجود دارد ، اما هیچ منبعی را مصرف نمی کند. ورودی فرایند زامبی تا زمانی که فرآیند والد اجازه مرگ آن را حفظ کند. فرآیند زامبی را فرآیند مرده نیز می نامند.

اولویت فرآیند و نحوه تنظیم آن

اولویت فرآیند (زیبایی) با استفاده از مقدار خوب تعیین می شود.

بله 40 مقدار خوب ، که -20 بالاترین و +19 کمترین آن است.

اکثر فرآیندهای سیستم در حال اجرا از مقدار پیش فرض خوب 0. استفاده می کنند

روند فرزند خوب را به ارث می برد مقدار والد آن. F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 8536 poll_s 15 فوریه؟ 00:00:02 / sbin / init 1 S root 2 0 0 80 0 - 0 برگشت 15 فوریه؟ 00:00:00 [kthreadd] 1 S root 3 2 0 80 0 - 0 smpboo 15 فوریه؟ 00:00:03 [ksoftirqd/0] 1 S root 5 2 0 60 -20 - 0 کارگر 15 فوریه؟ 00:00:00 [kworker/0:0H] 1 S root 7 2 0 80 0 - 0 rcu_gp 15 فوریه؟ 00:00:07 [rcu_sched] 1 S root 8 2 0 80 0 - 0 rcu_no 15 فوریه؟ 00:00:12 [rcuos/0] 1 S root 9 2 0 80 0 - 0 rcu_no 15 فوریه؟ 00:00:03 [rcuos/1] 1 S root 10 2 0 80 0 - 0 rcu_no 15 فوریه؟ 00:00:04 [rcuos/2] .................................................. ....

برای تعریف زیبایی پیش فرض ، از دستور nice بدون هیچ گونه گزینه یا استدلالی استفاده کنید:

 $ nice
0 

هنگام اجرای برنامه یا فرمان ، ممکن است اولویت متفاوتی به آن داده شود.

به عنوان مثال ، برای اجرای فرمان برتر با اولویت پایین +2:

 $ nice -2 بالا 

از ps استفاده کنید دستور را با گزینه -l مشاهده کنید یا خروجی فرمان بالا را مشاهده کرده و اولویت فرآیند را بررسی کنید.

باید +2 باشد.

برای اجرای همان برنامه با اولویت بالاتر با ویژگی -2 ، یک مقدار جدا شده با خط تیره:

 # nice --2 top 

مقدار جدید را با دستور ps بررسی کنید یا خروجی فرمان بالا را مشاهده کنید.

باید -2 باشد.

فهرست باز است files

فایل هنگامی که یک فرایند یا برنامه ذخیره شده در آن در حال اجرا است باز می شود و زمانی که دیگر نیازی به آن نیست یا برنامه یا برنامه مربوط به آن خارج می شود بسته می شود.

از دستور lsof (فهرست فایل های باز) برای تعیین اطلاعات مربوط به اینکه کدام فایلها باز هستند ، کدام فرایندها از آنها استفاده می کند و چه کسی آنها را در اختیار دارد.

بدون هیچ گونه گزینه ای ، این و فرمان همه فایلهای باز شده را لیست می کند.

 # lsof
COMMAND PID TID USER FD TYPE DEVICE SIZE / OFF NODE NAME
init 1 root cwd DIR 8.1 4096 2 /
init 1 root rtd DIR 8.1 4096 2 /
init 1 root txt REG 8،1 265848 3801191 / sbin / init
.................................................. ............... 

تیم نه ستون در خروجی ایجاد کرد. آنها در جدول زیر فهرست شده و توضیح داده شده اند:

ستون توضیحات
COMMAND نه نویسه اول نام فرمان یا فرایند را نمایش می دهد.
PID PID فرآیند را نمایش می دهد .
USER صاحب فرآیند را نمایش می دهد.
FD توصیف کننده فایل را نمایش می دهد. برخی از مقادیر در این زمینه می تواند به شرح زیر باشد:
FD cwd = فهرست فعلی کار ؛ rtd = فهرست اصلی ؛
FD txt = فایل متنی ؛ mem = فایل محدود به حافظه ؛ pd = دایرکتوری والدین
TYPE نوع فایل را نمایش می دهد.
DEVICE شماره های اصلی و جزئی دستگاهی را که فایل روی آنها قرار دارد نمایش می دهد
SIZE اندازه فایل
را نمایش می دهد NODE شماره inode فایل را نمایش می دهد.
NAME نام فایل یا نام سیستم پرونده ای که فایل در آن قرار دارد را نمایش می دهد.