在 Linux 終端上執行命令的通常風格是簡單地運行它並等待它正常退出。命令退出后,可以繼續連續執行其他命令。這就是所謂的在前台運行命令。正如這個詞所暗示的那樣,您可以在終端上直觀地看到命令的輸出。
但是,在前台運行命令可能會帶來一系列挑戰。該命令可能需要很長時間才能退出,導致您浪費寶貴的時間,不能執行其它命令,只能等到該命令執行結束,這種就類似那種串行工作一樣。這個時候如果想再執行其它命令,其實也可以在重新建立一個新的會話窗口來執行其它命令操作。
在這種情況下,在后台運行命令是您最好的選擇。您可以在前台並發執行其他命令時將命令發送到后台。這提高了在終端上工作的效率,並節省了您的時間。
下面就來看一看Linux命令如何再后台運行的。
1,運行命令或腳本在后台使用&符合
要在后台運行命令或腳本,請在末尾使用 & 符號 (&) 將其終止,如下所示。
注意:以 & 符號結束命令不會將命令與您分離。它只是將其發送到您正在使用的當前會話shell的后台,該命令仍會持續輸出將輸出打印到STDOUT或STDERR,這也會阻止您在終端上執行其他命令。

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

2,運行命令和腳本在后台使用重定向/dev/null
下面來看第二種方式運行命令或腳本在后台,將要運行的命令或腳本重定向到/dev/null,最后在加上一個&符號。命令如下
下面是具體操作的命令,運行ping www.baidu.com 重定向到/dev/null,最后在加上一個&符號。命令如下

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

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

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

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