有的時候我們需要長時間地運行background programs
,而且不希望程序退出,今天我們要來看一下如何在linux
環境下來實現這個目的。
我的演示環境是Ubuntu 16.04 LTS
。
首先第一種辦法,使用系統命令:
$ nohup command > /dev/null 2>&1 &
其中command
是我們要運行的命令,需要我們替換上去。(比如我們要運行一個名爲EagleJobDispatcher
的程序,那麼以上命令就是
$ nohup ./EagleJobDispatcher > /dev/null 2>&1 &
nohup
的意思是即使登出也不會終止該進程。> /dev/null
意思是將stdout
引導到/dev/null
這個不存在的設備(所以程序的輸出將不會被記錄)。2>&1
的意思是stderr
也引導至stdout
,而stdout
已經被引導至/dev/null
。我們可以用一個文件路徑來替換&1
,用以保存程序的錯誤信息,比如2>/tmp/errorLogs
。最後的
&
表示我們希望這個程序在後臺運行。
第二種方法,我們需要使用screen
這個程序。首先我們需要安裝screen
:
$ sudo apt-get install screen
完成後我們輸入screen
,回車後進入screen
的提示信息後再按回車來進入。接下來我們輸入我們要運行的命令:
$ ./EagleJobDispatcher
當程序開始運行後,我們輸入Ctrl + A
,然後按D
鍵來detach
,完成後screen
會脫離:
[screen is terminating]
然後我們可以輸入
$ screen -ls
來查看我們運行的進程:
$ screen -ls
There is a screen on:
29478.pts-8.localhost (08/25/2017 08:35:16 AM) (Detached)
1 Socket in /var/run/screen/S-root.
screen
的強大在於我們可以再回到運行的程序裏,而第一種方法是不可以的:
$ screen -r 29478.pts-8.localhost
現在就算我們關閉terminal
我們的程序依然會持續運行,如果需要關閉我們再通過以上命令回到程序退出即可。