چگونه دستورات لینوکس را در پس زمینه اجرا کنیم؟
دستورات لینوکس یک راه عالی برای تعامل با سیستم از طریق ترمینال است. با این حال، گاهی اوقات ممکن است مدتی طول بکشد تا کار مورد نظر به پایان برسد. این امر کاربران را مجبور میکند تا زمان زیادی منتظر بمانند تا فرآیند به پایان برسد یا به طور کلی یک shell جدید ایجاد کند. خوشبختانه، میتوانید با دنبال کردن چند روش ساده، دستورات لینوکس را در پسزمینه اجرا کنید. در این مطلب به معرفی چند روش برای اجرای دستورات لینوکس در بکگراند پرداختهایم.
-
بعد از دستور خود یک اَمپِرسَند (Ampersand) اضافه کنید
سادهترین راه برای اجرای دستور پسزمینه لینوکس، اضافه کردن نماد اَمپِرسَند (&) بعد از دستور است. برای مثال، اگر ویرایشگر متن gedit را از ترمینال خود راه اندازی کنید، تا زمانی که ویرایشگر را نبندید، نمیتوانید از شل استفاده کنید. با این حال، هنگامی که یک & اضافی به دستور خود اضافه میکنید، به Bash می گوید که دستور را در پس زمینه اجرا کند که به شما امکان میدهد بلافاصله از شل استفاده کنید.
gedit &
به طور مشابه، میتوانید یک اسکریپت Bash را در پسزمینه با مشخص کردن نام اسکریپت و به دنبال آن نماد اَمپِرسَند (&) اجرا کنید:
./script.sh &
-
از bg برای ارسال دستورات در حال اجرا به پس زمینه استفاده کنید
گاهی اوقات یک دستور را اجرا میکنید بعد متوجه میشوید که اتمام آن، خیلی بیشتر از تخمین شما طول میکشد. با زدن کلیدهای Ctrl + Z و استفاده از دستور bg میتوانید به راحتی چنین دستوراتی را به پس زمینه ارسال کنید. با زدن Ctrl + Z روند اجرا متوقف و bg آن را به پس زمینه میبرد.
با تایپ jobs در ترمینال میتوانید لیستی از تمام کارهای پس زمینه را مشاهده کنید. از دستور fg برای آوردن فرآیندهای پس زمینه به پیش زمینه استفاده کنید.
اگر چندین کار در پسزمینه اجرا میشوند، میتوانید fg و سپس n% را تایپ کنید، n شناسه کار (job ID) است. به عنوان مثال، برای انتقال کار پسزمینه 2 به پیشزمینه، دستور به صورت زیر خواهد بود:
fg %2
به طور مشابه، برای از بین بردن (Kill) یک job پسزمینه، از % و شناسه آنjob بعد از دستور kill استفاده کنید:
kill %2
-
با nohup دستورات را به پس زمینه ارسال کنید
دستور nohup در لینوکس به مدیران اجازه میدهد تا دستورات ترمینال را اجرا کنند که در برابر سیگنالهای HUP یا Hang Up مصون هستند. با استفاده از nohup میتوانید به راحتی دستورات را در پس زمینه لینوکس اجرا کنید.
مثال زیر یک اسکن پورت Nmap ساده را در پس زمینه اجرا می کند:
nohup sudo nmap -sS --top-ports=15 192.168.1.1/24
یکی از مزایای کلیدی nohup این است که دستورات شما حتی در صورت خروج از Shell اجرا میشوند. علاوه بر این، فایلهای لاگ تولید میکند. به دنبال nohup.out در دایرکتوری فعلی یا داخل $HOME بگردید.
-
دستورات پس زمینه را با استفاده از تغییر مسیرهای سیستم اجرا کنید
همچنین میتوانید با استفاده از تغییر مسیرهای سیستم، دستورات پس زمینه را در لینوکس اجرا کنید. به عنوان مثال، اگر دستور ping زیر را اجرا کنید، shell شما آن را در پس زمینه اجرا میکند و بلافاصله کنترل ترمینال را به شما باز می گرداند:
ping -c5 8.8.8.8 > output.log 2>&1 &
خروجی دستور ping به فایل output.log ریدایرکت میشود. اگر میخواهید نتیجه را حذف کنید، میتوانید آن را با /dev/null جایگزین کنید. 2>&1 به Bash می گوید هر گونه خطا را به همان فایل ریدایرکت کند و & نهایی به Bash سیگنال میدهد تا این دستور را در پس زمینه اجرا کند.
-
با استفاده از disown، دستورات لینوکس را برای اجرا در پس زمینه تنظیم کنید
دستور disown اجرای فرآیندها در پس زمینه را آسان میکند. ابتدا باید job را با استفاده از عملگر & به پس زمینه ارسال کنید. سپس، dirown را تایپ کنید تا آن را از شل خود جدا کنید.
gedit & disown
یکی از مزیتهای اصلی disown این است که، مانند nohup، وقتی شل خود را میبندید یا از سیستم خارج میشوید، سیستم job شما را از بین نمیبرد.
-
با استفاده از tmux دستورات لینوکس را در پس زمینه اجرا کنید
tmux یک مالتی پلکسر قدرتمند است که به شما امکان میدهد چندین جلسه ترمینال را در یک پنجره واحد اجرا کنید. یادگیری نحوه استفاده و پیکربندی tmux در لینوکس یک انتخاب عالی برای افرادی است که با آن آشنا نیستند. tmux اجرای دستورات پس زمینه در لینوکس را بدون دردسر می کند.
tmux new -d 'ping -c 10 8.8.8.8 > output.log'
هنگامی که دستور tmux بالا را اجرا می کنید، دستور ping را در یک shell جداگانه و آن را در پس زمینه اجرا میکند. با استفاده از این روش میتوانید هر فرآیند یا دستور لینوکس را در پس زمینه شروع کنید.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
دستورات لینوکس خود را در پس زمینه بگذارید
امکان اجرای دستورات در پسزمینه، مدیریت سیستم را برای مدیر سرور کارآمدتر میکند. شما میتوانید وظایف خود را به روشهای مختلفی به پس زمینه ارسال کنید. ویژگیهای Bash مانند کاراکتر & و Ctrl + Z راحت هستند، اما وقتی shell بسته میشود، سیستم کار پسزمینه را از بین میبرد. از سوی دیگر، ابزارهایی مانند nohup و disown حتی زمانی که از سیستم خارج می شوید یا شل را خاتمه میدهید، دستور شما را اجرا میکنند.
اگر برنامههای خود را برای مدت طولانی در پس زمینه رها کنید، اگر به درستی کدگذاری نشوند، ممکن است به فرآیندهای زامبی تبدیل شوند. این فرآیندها میتوانند سرعت سیستم را به میزان قابل توجهی کاهش دهند. بنابراین مطمئن شوید که هر چند وقت یکبار فرآیندهای زامبی را شناسایی کرده و از بین ببرید.