راهنمای جامع اجرای دستورات لینوکس در پس زمینه
در این مقاله میخوانید
اجرای دستورات لینوکس در پس زمینه مثل سفر با یک قطار سریعالسیر است. درحالیکه از مسیر لذت میبرید یا در واگن خود استراحت میکنید، قطار نیز مسیر خود را طی کرده تا درنهایت به مقصد یرسید. نحوه اجرای دستورات در پس زمینه لینوکس نیز به همین ترتیب است. یعنی همزمان که شما با سیستم خود کار میکنید، کارهای زمانبر مثل دانلود یا پردازش اطلاعات نیز در پس زمینه کار خودش را انجام میدهد. بدون اینکه اختلالی در کارتان بهوجود بیاید.
در این مقاله از آموزش لینوکس بلاگ پارس پک، میخواهیم نحوه اجرای دستورات در پس زمینه در لینوکس آشنا شویم. همچنین نحوه کار دو ابزار کاربردی را که برای ارسال دستورات به پس زمینه در لینوکس مورد استفاده قرار میگیرد، مورد بررسی قرار خواهیم داد. اگر میخواهید بهکمک این قابلیت لینوکس، کار خودتان را ساده کرده و بهرهوری بهتری از زمانتان داشته باشید، خواندن این مقاله را از دست ندهید.
معرفی و اجرای دستورات لینوکس در پس زمینه
اجرای دستورات لینوکس در پس زمینه روشی کارآمد برای بالا بردن عملکرد سیستم است. چون هر دستور در پس زمینه سیستم شما بدون تداخل با بخشهای دیگر کارش را انجام میدهد؛ درنتیجه سیستم لینوکس قادر است بهطور همزمان چند فرایند را بهصورت بهینه انجام دهد. راحتتر بگوییم: قادر است با یک دست چندین هندوانه را بهراحتی بلند کند. دستوراتی که در این زمینه کمکتان خواهد کرد شامل موارد زیر است.
با اجرای دستورات لینوکس در پس زمینه میتوانید با یک دست، چندین هندوانه را همزمان بلند کنید.
۱. اجرای دستورات لینوکس در پس زمینه با استفاده از &
وقتی از آیکون & در انتهای یک دستور در لینوکس استفاده میکنید، این دستور در پسزمینه (background) اجرا میشود. برای مثال، فرض کنید قصد داریم دستور command1 را در پسزمینه لینوکس اجرا کنیم. دستور را بهصورت زیر مینویسیم:
$ command1 &
با این کار، همزمان که دستور command1 در پس زمینه اجرا میشود، پوسته یا shell برای اجرای دستور بعدی آماده است.
همچنین میتوانید در یک خط چند دستور را بهصورت زیر وارد کنید:
$ command1 & command2 & command3
با این کار، ارسال دستورات به پس زمینه در لینوکس منتقل خواهد شد. برای مثال، همانطور که در تصویر زیر میبینید، دستورات زیر بهترتیب در پسزمینه اجرا میشوند:
$ ping google.com & ping 1.1.1.1 & echo Hello
۲. مشاهده لیست دستورات لینوکس در پس زمینه با دستور jobs
با دستور jobs لیست دستوراتی که در پس زمینه در حال انجام است، مشاهده خواهید کرد. برای مثال اگر مانند مرحله قبل، دستورات command1 ،command2 و command3 در حال اجرا باشد، با وارد کردن دستور زیر، لیست آنها را خواهیم دید:
$ jobs
خروجی دستور:
Output
[1] Running command1 & [2] Running command2 &
۳. انتقال دستورات از پسزمینه به پیشزمینه با دستور fg
فرض کنید قصد درست کردن یک پیتزا را دارید. خمیر پیتزا را در فر قرار میدهید تا خودش را بگیرد و همزمان به بقیه کارها میرسید. پس از آماده شدن خمیر آن را از فر بیرون آورده و مایع پیتزا را روی خمیر میریزید و مجدداً آن را در فر قرار دهید. این کار در سیستم لینوکس همان انتقال از پسزمینه به پیشزمینه دستورات است.
اگر میخواهید نظارت دقیقی روی دستوری داشته باشید که در پس زمینه لینوکس انجام میشود، نیاز است آن را به پیشزمینه منتقل کنید. برای این کار، fg را پیش از دستور موردنظر قرار دهید. برای مثال، میخواهیم دستور command2 را به پیشزمینه بیاوریم. آن را بهصورت زیر مینویسیم:
$ fg command2
همانطور که در تصویر زیر پیداست، دستور [1] و دستور [2] درحال اجرا در پسزمینه است. با استفاده از دستور jobs لیست دستورات در حال اجرا در پیشزمینه را مشاهده و با دستور fg2 دستور دوم یعنی sleep 2000 را به پسزمینه منتقل میکنیم:
۴. توقف فوری دستورات با کلید ترکیبی ctrl + c
اگر قصد لغو یا توقف فوری دستور در حال اجرا را دارید، از کلید ترکیبی ctrl + c میتوانید استفاده کنید.
برای مثال، فرمان توقف فوری دستور پینگ گوگل را بهصورت زیر وارد میکنیم:
$ ping google.com ctrl + c
با فشردن ctrl + c، اجرای دستور ping بلافاصله متوقف میشود.
۵. توقف و ارسال دستورات به پس زمینه با کلید ترکیبی ctrl + z
با وارد کردن کلید ترکیبی ctrl + z دستور موردنظر متوقف شده و به پسزمینه منتقل میشود. مانند زمانی که پخت پیتزا در فر به پایان رسیده و آن را از فر بیرون میآورید تا وضعیت پیتزا را بسنجید.
در مثال زیر، ما دستور پینگ گوگل را متوقف کرده و به پسزمینه منتقل کردیم:
$ ping google.com ctrl + z
۶. اجرای دستور متوقف شده در پسزمینه با bg
تا این قسمت از مقاله اجرای دستورات لینوکس در پس زمینه، فهمیدیم برای انتقال دستورات به پیشزمینه از دستور fg استفاده میکنیم. اما برای اجرای دستور متوقف شده در پسزمینه چطور؟ برای این کار از دستور bg استفاده میکنیم.
برای مثال، دستور زیر نشان میدهد دستور سوم که متوقف شده دوباره در پسزمینه به اجرای خود ادامه خواهد داد:
$ bg command3
اگر مقدار عددی در مقابل bg قرار ندهید، بهصورت پیشفرض، آخرین دستوری که متوقف شده است، در پسزمینه اجرا میشود. همانطور که در تصویر زیر میبینید، پس از ظاهر شدن لیست دستورات از طریق jobs، دستور bg آخرین دستوری را که متوقف شده بود، مجددا به اجرا درآورده است.
۷. اجرای گروهی دستورات لینوکس در پس زمینه با ()
در قسمت اول مقاله اجرای دستورات لینوکس در پس زمینه، گفتیم با & میتوانید در یک خط دستورات مختلف را نوشته تا بهترتیب در پسزمینه اجرا شود. روش دیگری که میتوانید برای اجرای گروهی دستورات در پسزمینه لینوکس بهکار ببرید، استفاده از پرانتز () است.
یعنی اگر دستورات را بهصورت (& command) در پرانتز قرار داده و در انتهای هر دستور از & استفاده کنید، دستورات بهصورت گروهی در پسزمینه اجرا شده و نتیجه نهایی برایتان ظاهر خواهد شد.
برای مثال اگر بخواهیم دستور copy files در پسزمینه اجرا شود، بهصورت زیر آن را مینویسیم:
$ (copy files &)
فرق اجرای دستور & با پرانتز و بدون پرانتز در نحوه اجرای دستورات است. یعنی وقتی گروهی از دستورات را در پرانتز قرار میدهید، لینوکس بهصورت یک زیرفرایند به آن نگاه میکند. بهعبارتی، تمام دستورات داخل پرانتز انجام شده و نتیجه نهایی آن برایتان ظاهر میشود. وقتی دستورات را بدون پرانتز اجرا میکنید، لینوکس دستورات بهطور مستقیم در پسزمینه اجرا کرده و نتیجه هر دستور را بهطور تکتک به شما نشان میدهد.
برای مثال:
$ (command1; command2; command3) &
در مثال بالا، ابتدا دستور sleep3 ، سپس دستور چاپ command2 و در نهایت دستور چاپ Done اجرا میشود و خروجی نهایی نتیجه آخر یعنی Done را به شما نشان میدهد.
لینوکس چه مزایایی دارد و از کدام زبانهای برنامهنویسی پشتیبانی میکند؟ چه کسانی از لینوکس و برای چه کارهایی بیشتر استفاده میکنند؟ در مقاله زیر بخوانید.
۸. اجرای دستورات لینوکس در پس زمینه و جلوگیری از توقف آن با nohup
فرض کنید شما برای رسیدن به قرار مهمی عجله دارید. یک دستور طولانیمدت و مهمی نیز در پسزمینه در حال اجرا است. دستورات در کمال صبر و آرامش در حال اجرا هستند و گویی اجرای آنها تا ساعتها ادامه دارد. اگر از سیستم خارج شوید، تمام دستورات متوقف شده و هرچه تا الان رشته کردید، پنبه میشود. در این شرایط چه کار باید کرد؟
دستور nohup این امکان را بهشما میدهد تا اجرای دستورات در پس زمینه در لینوکس حتی درصورت خروج شما از سیستم ادامه پیدا کند. ساختار دستور بهصورت زیر است:
nohup command options &
برای مثال، فرض کنید قصد دارید اجرای پینگ گوگل را به سیستم بسپارید و خودتان از آن خارج شوید. دراینصورت، با دستور زیر میتوانید با آرامش خاطر به کارتان برسید:
$ nohup ping google.com &
پینگ گوگل در پسزمینه اجرا خواهد شد و اگر شما از سیستم خارج شوید یا نشست (session) شما متوقف شود، با دستور nohup برنامه به کار خودش ادامه میدهد. خروجی نیز در فایل nohup.out برایتان ذخیره خواهد شد.
اکنون اگر بخواهیم لیست دستورات لینوکس که در پس زمینه توسط nohup در حال اجرا است، مشاهده کنیم، دستور jobs را وارد میکنیم. با دستور kill نیز میتوان تمام این دستورات را متوقف کرد.
۹. screen و tmux؛ مخصوص اجرای دستوراتی با پردازش طولانیمدت
اگر در اجرای دستورات لینوکس در پس زمینه بهدنبال ابزارهای پیشرفتهتری هستید که مانند آچار فرانسه قابلیتهای زیادی برای اجرای دستورات و اسکریپتهای طولانیمدت و سنگین نشان دهد، نگاهی به دو دستور screen و tmux بیندازید.
این دستورات یک پوسته (shell) پایدار ایجاد میکنند که قابل اتصال و جداسازی است. یعنی میتوانید با خیال راحت از سیستم خارج شوید و برای بررسی روند مجددا برگردید. اگر این دو ابزار روی سیستم شما نصب نیستند، با استفاده از دستور زیر میتوانید آنها را نصب کنید:
۱. دستور screen
در اجرای دستورات لینوکس در پس زمینه، این دستور فرصت ایجاد یک نشست (session) جدید به شما میدهد که در آن میتوانید دستور خود را اجرا کنید. سپس بدون اینکه دستور متوقف شود، از نشست خارج شوید.
برای مثال، با دستور زیر ابتدا یک نشست ایجاد میکنیم:
$ screen -S my_session
سپس دستور موردنظرمان را اجرا میکنیم:
$ command…
اکنون با فشردن کلید ترکیبی ctrl + a و سپس کلید d، بدون توقف دستور از نشست خارج شویم یا بهاصطلاح detach کنیم.
۲. دستور نمایش لیست نشستهای فعال
screen -list
۳. دستور اتصال مجدد به یکی از نشستها
screen -r شماره نشست
در مثال بالا، اتصال مجدد به نشستی با شماره 3934 در دستور آخر انجام شده است.
۴. دستور tmux
این ابزار، نیز مشابه session این امکان را به شما میدهد تا یک نشست جدید ایجاد کرده و دستور خود را اجرا کنید:
$ tmux new -s my_session $ command…
برای detach کردن با فشردن کلید ترکیبی ctrl + a و سپس کلید d، بدون توقف دستور از نشست خارج شویم.
۵. دستور نمایش لیست نشستهای فعال
tmux ls
۶. دستور اتصال مجدد به یکی از نشستها:
tmux attach -t عنوان نشست
در تصویر بالا، دستور اتصال به نشستی با عنوان my_session اجرا شده است.
۴۰ تا از پرکاربردترین دستورات لینوکسی را در مقاله زیر بخوانید.
جدول راهنمای اجرای دستورات لینوکس در پس زمینه
دستور |
عملکرد |
تابع & | اجرای دستور در پسزمینه |
دستور jobs | مشاهده لیست دستورات در حال اجرا در پس زمینه |
دستور fg | انتقال دستورات از پسزمینه به پیشزمینه |
کلید ترکیبی ctrl + c | توقف فوری دستورات در حال اجرا |
کلید ترکیبی ctrl + z | توقف در ارسال دستورات به پسزمینه |
دستور bg | اجرای مجدد دستور متوقف شده در پسزمینه |
تابع () | اجرای گروهی دستورات در پسزمینه |
دستور nohup | اجرای دستورات در پس زمینه بدون توقف |
دستور kill | توقف دستورات در حال اجرا در پسزمینه |
|
مناسب برای پردازشهای طولانی |
جمعبندی
اجرای دستورات لینوکس در پس زمینه از جذابترین قابلیتهای لینوکس است و این امکان را به شما میدهد تا بدون نیاز به کنترل اجرای برنامهها، به کارهایتان برسید. در این مقاله از آموزش سیستمعامل بلاگ پارس پک، نحوه اجرای دستورات در پس زمینه لینوکس را با استفاده از دستورات زیر بررسی کردیم:
- fg
- jobs
- bg
- nohup
- &
همچنین دو ابزار کاربردی tmux و screen را برای مدیریت ترمینال و نشستهای طولانیمدت شل معرفی کردیم. پس از اجرای این ابزارها بدون جداشدن نشستها از ترمینال میتوانید از قابلیت detach استفاده کنید و از برنامه خارج شوید درحالیکه برنامه همچنان در پسزمینه به کارش ادامه میدهد. امیدواریم این مقاله برای اجرای دستورات لینوکس در پس زمینه کمکتان کند. از نگاه سبزتان برای همراهی تا انتهای این مطلب ممنونیم.
سؤالات متداول
۱. چگونه یک دستور را در پس زمینه لینوکس اجرا کنیم؟
با اضافه کردن & در انتهای دستور میتوانید آن را در پسزمینه بهراحتی اجرا کنید.
۲. چطور لیست دستورات در حال اجرا در پسزمینه را مشاهده کنیم؟
دستور jobs امکان مشاهده لیست دستورات در حال اجرا در پسزمینه را به شما میدهد.
۳. چگونه دستورات در حال اجرا در پسزمینه لینوکس را متوقف کنیم؟
با فشردن کلید ترکیبی ctrl+z میتوانید دستور را متوقف و به پسزمینه منتقل کنید. همچنین میتوانید از دستور kill پیش از شماره دستور موردنظر استفاده کنید. برای مثال kill 1234.
۴. چطور دستور پسزمینه را به پیشزمینه بیاورم؟
با دستور fg و سپس شماره دستور میتوانید دستور را به پیشزمینه بیاورید.
۵. چگونه یک دستور متوقف شده در پسزمینه را مجددا فعال کنم؟
با استفاده از دستور bg و شماره دستور میتوانید مجددا دستور را در پسزمینه اجرا کنید.