مدیریت پروسهها و تفاوت Ctrl+Z با Ctrl+C
کار کردن با خط فرمان برای تمام کاربران بسیار لذت بخش و جذاب میباشد، یادگیری تکنیک ها روشهای استفاده از این ابزار از شما یک شوالیه در گنو/لینوکس خواهد ساخت.
این ابزار سریع، انعطاف پذیر و در برخی موارد اگر به درستی ندانید که چه میکنید خطرناک است، در پست قبل نه دستور مهلک و خطرناک در گنو/لینوکس را مورد برسی قرار دادیم، در این پست با مدیریت پروسهها در خط فرمان آشنا شده و به برسی تفاوت Ctrl+Z و Ctrl+C در خط فرمان میپردازیم.
Ctrl+Z و Suspend کردن پروسه
اگر پس از اجرا کردن یک دستور در ترمینال Ctrl+Z بزنید، پروسه درحال اجرا، موقتا به حالت تعلیق (Suspend) در میآید (به این منظور یک سیگنال SIGTSTP به پروسه ارسال میشود)، یعنی میتوان مجددا اجرای آن را از سر گرفت، پس از وارد شدن پروسه به حالت تعلیق پیغامی مشابه متن زیر بر روی ترمینال درج میشود:
command نام دستور (برنامه) اجرا شده میباشد.
پس از به تعلیق درآمدن پروسه، خط فرمان برای دریافت دستورات دیگر در دسترس قرار میگیرد و میتوانید سایر دستورات مورد نظر خود را اجرا نمایید.
اجرای مجدد پروسه های Suspend با fg و bg
برای اجرای مجدد برنامه تعلیق شده میتوان از دستور fg به معنی foreground یا bg به معنی background استفاده کرد.
تفاوت پروسه های Background و Foreground
همانطور که از نام دستورات برمیآید است fg برنامه را در foreground به اجرا در میآورد، در این حالت Terminal برای دریافت دستورات از دسترس کاربر خارج میشود. به خاطر داشته باشید همچنان میتوانید با فشردن Ctrl+Z برنامه را مجددا suspend کرده و Terminal را در دست بگیرید، در مقابل دستور bg برنامه را از حالت suspend خارج کرده و در background اجرا میکند و Terminal همچنان در دسترس و قادر به دریافت دستورات شما خواهد بود.
در صورتی که چند پروسه suspend شده داشته باشیم و دستورات فوق را بدون پارامتر خاصی اجرا نماییم، آخرین فرآیند suspend شده از حالت تعلیق خارج میشود، به مثال زیر توجه نمایید:
ابتدا mousepad را اجرا و سپس آن را suspend کردهایم، در مرحله بعد gedit را اجرا و همانند قبل با Ctrl+Z به حالت تعلیق درآورده ایم، حال اگر fg یا bg را اجرا نماییم آخرین پروسه suspend شده یعنی gedit از حالت تعلیق خارج میشود.
اگر قصد خارج کردن یک پروسه خاص به غیر از آخرین پروسه تعلیق شده را داشته باشیم، با استفاده از عدد اختصاص داده شده به پروسه معلق و به صورت زیر عمل میکنیم:
mousepad را در foreground اجرا میکند، یا:
که mousepad را در background اجرا میکند.
به دست آوردن لیست پروسه های Suspend و درحال اجرا در Background
برای به دست آوردن لیست پروسه های suspend شده یا پروسه های در حال اجرا در background از دستور jobs استفاده میکنیم، خروجی این دستور به شکل زیر است:
در لیست بالا همانطور که مشاهده میکنید gedit در background اجرا شده، (باتوجه به Running و علامت &) و mousepad در حالت suspend قرار دارد و اجرای آن متوقف شده است (Stopped).
از بین بردن یک پروسه
برای از بین بردن یک پروسه به طور کامل که suspend شده یا در background قرارگرفته میتوانید از دستور kill به همراه عدد اختصاص یافته شده به پروسه استفاده نمایید:
پروسه gedit را از بین میبرد.
اجرای مستقیم برنامه در Background
برای اجرا و قرار دادن یک پروسه در background به صورت مستقیم در انتهای دستور، پس از یک فاصله، از علامت & استفاده میکنیم:
دستور بالا gedit را اجرا و در background قرار میدهد. خروجی دستور jobs پس از دستور فوق به شکل زیر است:
Ctrl+C و لغو اجرای پروسه (Terminate)
اگر از دستور Ctrl+C استفاده نماییم، ادامهی اجرای پروسه Run شده که در foreground قرار دارد به طور کامل لغو میشود، اصطلاحا پروسه Terminate خواهد شد، برای اینکار از سیگنال SIGINT استفاده میشود.