پراسس یک نمونه در حال اجرا از یک برنامه است که با توجه به سیستمعامل (OS)، ممکن است از یک یا چندین ترد که دستورالعملها را به صورت همزمان انجام میدهند، تشکیل شده باشد.
به عنوان یک سیستمعامل Multi Tasking، لینوکس از اجرای بسیاری از پراسسها، یا درواقع بسیاری از برنامهها، دستورات یا کارهای مشابه در پسزمینه پشتیبانی میکند، درحالیکه شما همچنان در پیشزمینه کار خود را ادامه میدهید!
اساساً دو نوع پراسس در لینوکس وجود دارد:
یک پراسس پیشزمینه، هر دستور یا کاری است که شما به طور مستقیم اجرا کرده و منتظر هستید که کامل شود. برخی از پراسسهای پیشزمینه، نوعی رابط کاربری را نشان میدهند که کاربر میتواند به طور مداوم با آن در تعامل باشد. درحالیکه برخی دیگر یک کار را انجام میدهند و سیستم را به اصطلاح “فریز میکنند” تا کارشان به پایان برسد.
در ترمینال، یک پراسس پیشزمینه با تایپ کردن یک فرمان شروع میشود. به عنوان مثال، برای دیدن محتوای یک دایرکتوری از دستور (ls DirecoryName) استفاده کنید.
به خاطر داشته باشید درحالیکه سیستم به تهیه و چاپ محتوا مشغول است، شما نمیتوانید دستور دیگری را در آن ترمینال اجرا کنید. پس از چاپ محتوا، مجدداً به ترمینال دسترسی خواهید داشت.
برخلاف پراسسهای پیشزمینه، لازم نیست کاربر برای اجرای دستورات بیشتر منتظر بماند تا یک پراسس پسزمینه به پایان برسد. بلکه در حد مجاز حافظهی موجود، کاربر میتواند بسیاری از دستورات پسزمینه را یکی پس از دیگری اجرا کند.
برای اجرای یک دستور به عنوان یک پراسس پسزمینه، دستور را تایپ کرده و یک & به انتهای دستور اضافه کنید. به عنوان مثال (ls DirectoryName &).
پراسسهای پسزمینه با اولویت پایینتر نسبت به پراسسهای پیشزمینه اجرا میشود. پس از اتمام پراسس پسزمینه، پیامی مبنی بر پایان یافتن پراسس روی صفحه خواهید دید.
اگر یک پراسس پیشزمینه زمانبر است، با فشار دادن کلیدهای Ctrl + Z آن را متوقف کنید. پراسس متوقف شده هنوز وجود دارد، اما اجرای آن به حالت تعلیق درآمده است. برای از سرگیری اجرا در پسزمینه دستور bg و در پیشزمینه دستور fg را اجرا کنید.
پراسس init
هنگام بوت، سیستم کرنل پراسس ویژهای به نام init ایجاد میکند که والد کلیه پراسسهای سیستم است. تمام پراسسهای موجود در سیستم (با استفاده از ()fork) توسط پراسس init یا یکی از فرزندان آن ایجاد میشوند.
پراسس init همیشه دارای شماره شناسه 1 است و با امتیازات SuperUser اجرا میشود. پراسس init نمیتواند کشته شود و فقط در صورت خاموش شدن سیستم خاتمه مییابد. وظیفه اصلی این پراسس ایجاد و نظارت بر طیف وسیعی از پراسسهای مورد نیاز سیستم در زمان اجرا است.
پراسسهای Daemon
این پراسسها نوع خاصی از پراسسهای پسزمینه هستند که در زمان راهاندازی سیستم شروع میشوند و به عنوان یک سرویس برای همیشه در حال اجرا هستند. این پراسسها نمیمیرند و بصورت خودکار به عنوان وظایف سیستم (بصورت سرویس) اجرا میشوند. با این حال کاربر میتواند از طریق پراسس init آنها را کنترل کند.
این پراسسها، پراسسهایی با اهداف ویژه هستند که همانند سایر پراسسها توسط سیستم ایجاد و مدیریت میشوند. با این حال، تفاوتهایی با پراسسهای دیگر دارند:
پراسسهای Daemon معمولاً در بوت سیستم شروع میشوند و تا زمان خاموش شدن سیستم وجود دارند.
بنابراین هیچ ترمینال کنترلکنندهای ندارند که بتوانند ورودی از آن بگیرند یا خروجی در آن بنویسند.
یک پراسس جدید معمولاً زمانی ایجاد میشود که یک پراسس موجود، یک نسخه دقیق از خود را در حافظه ایجاد کند. پراسس فرزند، محیطی همانند والد خود خواهد داشت با این تفاوت که فقط شماره شناسه پراسس متفاوت است.
دو روش مرسوم برای ایجاد یک پراسس جدید در لینوکس وجود دارد:
این روش نسبتاً ساده ولی ناکارآمد است و خطرات امنیتی خاصی دارد.
این روش کمی پیشرفته است اما انعطافپذیری و سرعت بیشتری را به همراه امنیت ارائه میدهد.
از آنجا که لینوکس یک سیستم چند کاربره است؛ به این معنی که کاربران مختلف میتوانند برنامههای متفاوتی را روی این سیستم اجرا کنند، باید هر نمونه در حال اجرا از یک برنامه توسط کرنل به صورت منحصر به فرد مشخص شود.
یک پراسس با شماره شناسه (PID)، همچنین شماره شناسه پراسس والد (PPID) مشخص میشود، بنابراین پراسسها را میتوان به صورت زیر دستهبندی کرد:
این پراسسها، پراسسهای دیگری را در زمان اجرا ایجاد میکنند.
این پراسسها، توسط پراسسهای دیگری در زمان اجرا ایجاد میشوند.
در حین اجرا، یک پراسس بسته به محیط یا شرایط از یک حالت به حالت دیگر تغییر میکند. در لینوکس، یک پراسس دارای حالتهای زیر است:
در این حالت، پراسس یا در حال اجرا و یا آماده اجرا است. یعنی درواقع منتظر است که به یکی از CPUها اختصاص یابد.
در این حالت، پراسس منتظر وقوع یک رویداد یا یک منبع از سیستم است.
در این حالت، معمولاً پراسس با دریافت سیگنال متوقف شده است. به عنوان مثال، پراسسی که درحال دیباگ است.
در این حالت، پراسس مرده یا متوقف شدهاست. اما هنوز در جدول پراسسها وجود دارد.
در لینوکس، تمام پراسسهای فعال دارای اولویت و ارزش خاصی هستند، معمولا پراسسهای با اولویت بالا نسبت به پراسسهای با اولویت پایین، زمان بیشتری پردازنده را در اختیار دارند. با این حال، کاربر میتواند با دستورات Nice و Renice اولویتها را تغییر دهد.