有的时候我们需要长时间地运行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
我们的程序依然会持续运行,如果需要关闭我们再通过以上命令回到程序退出即可。