EVE Light on Life

Linux程序后台运行的方法

有时候我们想执行一个命令,并让它在后台一直执行即可。使用方法很简单,在命令后面加&即可。

&命令行结尾法

[email protected]:~$ tar -zpc -f /tmp/etc.tar.gz /etc &
[1] 10131
[email protected]:~$ tar: Removing leading `/` from member names

在命令后加了一个&之后,该命令就在后台运行了,BASH会给这个命令一个job number,就是第二行中括号里面的那个数字1。至于后面那个10131是这个命令的PID。

第三行是命令的输出信息,正常命令运行会有标准输出stdout和标准错误输出stderr,默认显示到屏幕上。由于我们没有制定数据输出的位置,所以在后台运行的程序仍输出到屏幕。

利用数据流重导向,将输出的数据传入某个文件中,上面的命令可以这么做:

[email protected]:~$ tar -zpc -f /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
[1] 10122

>代表stdout,2>代表stderr,&1表示输出到同一个文件。如果不想输出到某个文件,可以将文件名改为/dev/null,所有的数据到这个文件中全都变为空。

这个是后台运行程序的常用方法,不过如果是在模拟终端中后台运行了程序,将终端关了,这个后台程序也停止了。因为程序收到终端关闭的信号,自然将自己关掉。下面还有一种方法实现终端关闭后程序依然能在后台运行。

nohup命令

用法:nohup COMMAND [ARG]

默认标准输出到$HOME/nohup.txt,可以使用第一种方法重定向数据到另一个文件。

虽然关掉终端该命令仍可以在后台运行了,当nohup命令会占用着终端,不能再执行其他命令。

可以与第一个方法结合,在nohup命令后加&,最终的命令是这样的:

nohup find / -name "test" > /tmp/findtestresult.txt 2>&1 &