cloudavid
cloudavid
خواندن ۴ دقیقه·۳ سال پیش

پراسس‌ها در لینوکس/بخش اول

پراسس چیست؟

پراسس یک نمونه در حال اجرا از یک برنامه است که با توجه به سیستم‌عامل (OS)، ممکن است از یک یا چندین ترد که دستورالعمل‌ها را به صورت همزمان انجام می‌دهند، تشکیل شده‌ باشد.

انواع پراسس‌ها

به عنوان یک سیستم‌عامل Multi Tasking، لینوکس از اجرای بسیاری از پراسس‌ها، یا درواقع بسیاری از برنامه‌ها، دستورات یا کارهای مشابه در پس‌زمینه پشتیبانی می‌کند، درحالی‌که شما همچنان در پیش‌زمینه کار خود را ادامه می‌دهید!

اساساً دو نوع پراسس در لینوکس وجود دارد:

پراسس‌های پیش‌زمینه (Foreground processes) یا پراسس‌های تعاملی

یک پراسس پیش‌زمینه‌، هر دستور یا کاری است که شما به طور مستقیم اجرا کرده و منتظر هستید که کامل شود. برخی از پراسس‌های پیش‌زمینه، نوعی رابط کاربری را نشان می‌دهند که کاربر می‌تواند به طور مداوم با آن در تعامل باشد. درحالی‌که برخی دیگر یک کار را انجام می‌دهند و سیستم را به اصطلاح “فریز می‌کنند” تا کارشان به پایان برسد.
در ترمینال، یک پراسس پیش‌زمینه با تایپ کردن یک فرمان شروع می‌شود. به عنوان مثال، برای دیدن محتوای یک دایرکتوری از دستور (ls DirecoryName) استفاده کنید.

به خاطر داشته باشید درحالی‌که سیستم به تهیه و چاپ محتوا مشغول است، شما نمی‌توانید دستور دیگری را در آن ترمینال اجرا کنید. پس از چاپ محتوا، مجدداً به ترمینال دسترسی خواهید داشت.

پراسس‌های پس‌زمینه (Background processes)، پراسس‌های غیر تعاملی یا خودکار

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

برای اجرای یک دستور به عنوان یک پراسس پس‌زمینه، دستور را تایپ کرده و یک & به انتهای دستور اضافه کنید. به عنوان مثال (ls DirectoryName &).

پراسس‌های پس‌زمینه با اولویت پایین‌تر نسبت به پراسس‌های پیش‌زمینه اجرا می‌شود. پس از اتمام پراسس پس‌زمینه، پیامی مبنی بر پایان یافتن پراسس روی صفحه خواهید دید.

اگر یک پراسس پیش‌زمینه زمان‌بر است، با فشار دادن کلیدهای Ctrl + Z آن را متوقف کنید. پراسس متوقف شده هنوز وجود دارد، اما اجرای آن به حالت تعلیق درآمده است. برای از سرگیری اجرا در پس‌زمینه دستور bg و در پیش‌زمینه دستور fg را اجرا کنید.

پراسس‌ init

هنگام بوت، سیستم کرنل پراسس ویژه‌ای به نام init ایجاد می‌کند که والد کلیه پراسس‌های سیستم است. تمام پراسس‌های موجود در سیستم (با استفاده از ()fork) توسط پراسس init یا یکی از فرزندان آن ایجاد می‌شوند.

پراسس init همیشه دارای شماره شناسه 1 است و با امتیازات SuperUser اجرا می‌شود. پراسس init نمی‌تواند کشته شود و فقط در صورت خاموش شدن سیستم خاتمه می‌یابد. وظیفه اصلی این پراسس ایجاد و نظارت بر طیف وسیعی از پراسس‌های مورد نیاز سیستم در زمان اجرا است.

پراسس‌های Daemon

این پراسس‌ها نوع خاصی از پراسس‌های پس‌زمینه هستند که در زمان راه‌اندازی سیستم شروع می‌شوند و به عنوان یک سرویس برای همیشه در حال اجرا هستند. این پراسس‌ها نمی‌میرند و بصورت خودکار به عنوان وظایف سیستم (بصورت سرویس) اجرا می‌شوند. با این حال کاربر می‌تواند از طریق پراسس init آن‌ها را کنترل کند.

این پراسس‌ها، پراسس‌هایی با اهداف ویژه هستند که همانند سایر پراسس‌ها توسط سیستم ایجاد و مدیریت می‌شوند. با این حال، تفاوت‌هایی با پراسس‌های دیگر دارند:

  • طولانی هستند:

پراسس‌های Daemon معمولاً در بوت سیستم شروع می‌شوند و تا زمان خاموش شدن سیستم وجود دارند.

  • در پس‌زمینه اجرا می‌شوند:

بنابراین هیچ ترمینال کنترل‌کننده‌ای ندارند که بتوانند ورودی از آن بگیرند یا خروجی در آن بنویسند.

ایجاد یک پراسس در لینوکس

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

دو روش مرسوم برای ایجاد یک پراسس جدید در لینوکس وجود دارد:

  • استفاده از تابع (system):

این روش نسبتاً ساده ولی ناکارآمد است و خطرات امنیتی خاصی دارد.

  • استفاده از توابع fork) / (exec)):

این روش کمی پیشرفته است اما انعطاف‌پذیری و سرعت بیشتری را به همراه امنیت ارائه می‌دهد.

لینوکس، چگونه پراسس‌ها را شناسایی می‌کند؟

از آنجا که لینوکس یک سیستم چند کاربره است؛ به این معنی که کاربران مختلف می‌توانند برنامه‌های متفاوتی را روی این سیستم اجرا کنند، باید هر نمونه در حال اجرا از یک برنامه توسط کرنل به صورت منحصر به فرد مشخص شود.

یک پراسس با شماره شناسه (PID)، همچنین شماره شناسه پراسس والد (PPID) مشخص می‌شود، بنابراین پراسس‌ها را می‌توان به صورت زیر دسته‌بندی کرد:

  • پراسس‌های والد:

این پراسس‌ها، پراسس‌های دیگری را در زمان اجرا ایجاد می‌کنند.

  • پراسس‌های فرزند:

این پراسس‌ها، توسط پراسس‌های دیگری در زمان اجرا ایجاد می‌شوند.

حالت‌های یک پراسس در لینوکس چگونه است؟

در حین اجرا، یک پراسس بسته به محیط یا شرایط از یک حالت به حالت دیگر تغییر می‌کند. در لینوکس، یک پراسس دارای حالت‌های زیر است:

  • حالت Running:

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

  • حالت Waiting:

در این حالت، پراسس منتظر وقوع یک رویداد یا یک منبع از سیستم است.

  • حالت Stopped:

در این حالت، معمولاً پراسس با دریافت سیگنال متوقف شده است. به عنوان مثال، پراسسی که درحال دیباگ است.

  • حالت Zombie:

در این حالت، پراسس مرده یا متوقف شده‌است. اما هنوز در جدول پراسس‌ها وجود دارد.

تغییر اولویت پراسس‌های لینوکس به چه صورت است؟

در لینوکس، تمام پراسس‌های فعال دارای اولویت و ارزش خاصی هستند، معمولا پراسس‌های با اولویت بالا نسبت به پراسس‌های با اولویت پایین، زمان بیشتری پردازنده را در اختیار دارند. با این حال، کاربر می‌تواند با دستورات Nice و Renice اولویت‌ها را تغییر دهد.


لینوکسlinuxosprocessبرنامه نویسی
ارائه دهنده زیرساخت امن و پایدار برای تداوم کسب و کارها
شاید از این پست‌ها خوشتان بیاید