如何在后台运行Linux命令并将进程从终端分离控制终端。当进程与终端关联时,可能会出现两个问题:您的控制终端充满大量输出或错误和诊断如果发生终端关闭,进程及其子进程将被终止以解决上述两个问题,您需要完全脱离控制终端的进程。在我们真正解决这个问题之前,让我们简要介绍一下如何在后台运行一个进程。如何在后台启动Linux进程或命令行如果一个进程已经在运行,比如下面的tar命令行例子,只需按Ctrl+Z就可以停止它(LCTT译注:这里的“停止”,不是终止,意思是“暂停”),然后输入命令bg继续作为任务在后台运行。您可以通过键入作业来查看所有后台作业。但是,标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)仍然混入控制台。$tar-czfhome.tar.gz.$bg$jobs在后台运行Linux命令你也可以直接使用符号&在后台运行一个进程:$tar-czfhome.tar.gz.&$jobs启动一个Linux后台进程请参见以下示例。尽管tar命令作为后台任务启动,但错误消息仍会发送到终端,这意味着该进程仍与控制终端相关联。$tar-czfhome.tar.gz.&$jobs后台运行的Linux进程信息退出控制台后,保持Linux进程运行我们会用到disown命令,在一个进程已经运行并置于后台后使用,它的作用是从shell的活动任务列表中删除一个shell任务,这样你将不能再对那个任务使用fg、bg命令。此外,当您关闭控制终端时,任务不会挂起(挂起)或向任何子任务发送SIGHUP。让我们看看下面这个使用bash内置命令disown的例子。$sudorsyncTemplates/*/var/www/html/files/&$jobs$disown-h%1$jobs关闭终端后,保持linux进程运行也可以使用nohup命令,这个命令也可以保证进程之后用户退出shell继续在后台运行。$nohuptar-czfiso.tar.gzTemplates/*&$jobs关闭shell后,将Linux进程置于后台,并从控制终端分离一个Linux进程。因此,为了让一个程序完全脱离控制终端,对于GUI程序如firefox,使用如下命令行格式效率更高:$firefox/dev/null&在Linux上,/dev/null是一个特殊的文件设备,忽略所有上面的命令,输入源和输出目标都是/dev/null。作为结束语,运行一个连接到控制终端的进程,作为用户,您将在终端上看到包含该进程数据的多行输出,包括错误消息。同样,当您关闭控制终端时,您的进程和子进程都将终止。重要的是,如对此主题有任何疑问或意见,请通过以下评论与我们联系。
