当一个程序与终端关联在一起时,可能会出现两种问题:

你的控制终端充满了很多输出资料或者错误及诊断资讯
如果发生终端关闭的情况,程序连同它的子程序都将会终止

为了解决上面两个问题,你需要从一个控制终端完全脱离一个程序。在我们实际上解决这个问题之前,让我们先简要的介绍一下,如何在后台执行一个程序。
如何在后台开始一个 Linux 程序或者命令列
如果一个程序已经执行,例如下面的 tar 命令列的例子,简单的按下 Ctrl+Z 就可以停止它(LCTT 译注:这里说的 “停止”,不是终止,而是 “暂停” 的意思),然后输入命令 bg 就可以继续以一个任务在后台执行了。
你可以通过输入 jobs 检视所有的后台任务。但是,标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)依旧掺杂到控制台中。

$ tar -czf home.tar.gz .
$ bg
$ jobs

在后台执行 Linux 命令
你也可以直接使用符号 & 在后台执行一个程序:

$ tar -czf home.tar.gz . &
$ jobs

在后台开始一个 Linux 程序
看一下下面的这个例子,虽然 tar 命令是作为一个后台任务开始的,但是错误资讯依旧传送到终端,这表示,程序依旧和控制终端关联在一起。

$ tar -czf home.tar.gz . &
$ jobs

执行在后台的 Linux 程序资讯
退出控制台之后,保持 Linux 程序的执行
我们将使用 disown 命令,它在一个程序已经执行并且被放在后台之后使用,它的作用是从 shell 的活动任务列表中移走一个 shell 任务,因此,对于该任务,你将再也不能使用 fg 、 bg 命令了。
而且,当你关闭控制控制终端,这个任务将不会挂起(暂停)或者向任何一个子任务传送 SIGHUP 讯号。
让我们看一下先下面的这个使用 bash 中内建命令 disown 的例子。

$ sudo rsync Templates/* /var/www/html/files/ &
$ jobs
$ disown -h %1
$ jobs

关闭终端之后,保持 Linux 程序执行
你也可以使用 nohup 命令,这个命令也可以在使用者退出 shell 之后保证程序在后台继续执行。

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs

关闭 shell 之后把 Linux 程序置于后台
从控制终端脱离一个 Linux 程序
因此,为了彻底从控制终端脱离一个程式,对于图形使用者介面 (GUI) 的程式例如 firefox 来说,使用下面的命令列格式会更有效:

$ firefox /dev/null &

在 Linux 上,/dev/null 是一个特殊的档案装置,它会忽略所有的写在它上面的资料,上述命令,输入来源和输出传送目标都是 /dev/null 。
作为结束陈述,执行一个连线到控制终端的程序,作为使用者你将会在你的终端上看到这个程序资料的许多行的输出,也包含错误资讯。同样,当你关闭一个控制终端,你的程序和子程序都将会终止。