如何在后台運行Linux命令或者腳本


在 Linux 終端上執行命令的通常風格是簡單地運行它並等待它正常退出。命令退出后,可以繼續連續執行其他命令。這就是所謂的在前台運行命令。正如這個詞所暗示的那樣,您可以在終端上直觀地看到命令的輸出。

但是,在前台運行命令可能會帶來一系列挑戰。該命令可能需要很長時間才能退出,導致您浪費寶貴的時間,不能執行其它命令,只能等到該命令執行結束,這種就類似那種串行工作一樣。這個時候如果想再執行其它命令,其實也可以在重新建立一個新的會話窗口來執行其它命令操作。

在這種情況下,在后台運行命令是您最好的選擇。您可以在前台並發執行其他命令時將命令發送到后台。這提高了在終端上工作的效率,並節省了您的時間。

下面就來看一看Linux命令如何再后台運行的。

1,運行命令或腳本在后台使用&符合

要在后台運行命令或腳本,請在末尾使用 & 符號 (&) 將其終止,如下所示。

[root@localhost sharplee]#command &

注意:以 & 符號結束命令不會將命令與您分離。它只是將其發送到您正在使用的當前會話shell的后台,該命令仍會持續輸出將輸出打印到STDOUT或STDERR,這也會阻止您在終端上執行其他命令。

[root@localhost sharplee]# ping www.baidu.com &

從上圖可以看出通過此種方式后台運行,是在后台運行了,但是輸出還是顯示在當前會話的shell中,執行后面的命令都看不到,如何解決呢,這時候就只能通過ps -a 查看進程id,通過kill -9 進程id來終止。或者再新連接一個會話窗口,從而通過ps -a,查看運行的進程,通過kill 來終止。

2,運行命令和腳本在后台使用重定向/dev/null

下面來看第二種方式運行命令或腳本在后台,將要運行的命令或腳本重定向到/dev/null,最后在加上一個&符號。命令如下

[root@localhost backdir]# commond &>/dev/null &

下面是具體操作的命令,運行ping www.baidu.com 重定向到/dev/null,最后在加上一個&符號。命令如下

[root@localhost backdir]# ping www.baidu.com &>/dev/null &

 接下來我們可以通過jobs命令來查看后台運行的命令或腳本,想要終止后台執行的命令,通過jobs查看出后台執行的進程id,通過kill -9 進程id進行殺掉后台運行的進程。

[root@localhost sharplee]# jobs -l

3,運行命令和腳本在后台使用nohup

在后台運行命令的另一種方法是使用 nohup 命令。nohup 命令(簡稱為"不掛起")是一個命令,即使在退出 shell 后也能保持進程運行。它通過阻止進程接收SIGHUP(信號掛起)信號來實現這一點,該信號通常在進程退出終端時發送到進程。命令如下

[root@localhost backdir]# nohup command &>/dev/null &
or
[root@localhost backdir]# nohup shell-script.sh &>/dev/null &

下面是具體操作的命令,運行ping 網址的nohup命令。命令如下

[root@localhost backdir]# nohup ping www.baidu.com &>/dev/null &

 接下來我們可以通過jobs命令來查看后台運行的命令或腳本,想要終止后台執行的命令,通過jobs查看出后台執行的進程id,通過kill -9 進程id進行殺掉后台運行的進程。

[root@localhost sharplee]# jobs -l

 

總結:通常上面三種方式的學習,后台運行命令選用最后一個nohup命令,因為最后一個命令是在前兩個基礎之上的增強。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM