如何在后台运行 Linux 命令并在终端中分离

在本指南中,我们将揭示一个简单但重要的概念,这是如何将进程与其控制终端完全分离。

当一个与终端关联时,可能会出现两个问题:

  1. 您的控制终端充满了如此多的输出数据和错误/诊断消息。
  2. 如果终端关闭,将被终止。

为了解决这两个问题,您需要将进程与控制终端完全分离。在我们实际解决问题之前,让我们简要介绍一下如何在 Linux 中后台运行进程。

如果一个进程已经在执行,例如下面,只需按Ctrl+Z停止它然后输入命令bg作为一项作业继续在后台执行。

您可以通过键入查看所有后台作业jobs。然而,其标准输入,标准输出, 和标准错误仍然连接到终端。

$ tar -czf home.tar.gz .
$ bg
$ jobs
在后台运行 Linux 命令

您还可以使用&符号在后台运行Linux进程,&符号。

$ tar -czf home.tar.gz . &
$ jobs
在后台启动 Linux 进程

看看下面的例子,尽管作为后台作业启动,错误消息仍然发送到终端,这意味着进程仍然连接到控制终端。

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

tar: ./.config/etcher: Cannot open: Permission denied
Linux 进程在后台运行消息

注销后保持 Linux 进程运行

我们将使用否认命令,该命令在进程执行完毕并置于后台后使用,其作用是从 shell 的活动列表作业中删除 shell 作业,因此您不会使用fg,bg不再对该特定工作发出命令。

此外,当您关闭控制终端或注销时,作业不会挂起或发送叹息任何儿童工作。

让我们看一下下面的使用示例折扣bash 内置函数。

$ 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 进程

因此,要将进程与控制终端完全分离,请使用以下命令格式,这对于图形用户界面更有效(图形用户界面) 应用程序,例如 Firefox:

$ firefox </dev/null &>/dev/null &

在Linux中,/dev/空是一个注销(摆脱)写入其中的所有数据,在上面的命令中,读取输入,并将输出发送到/dev/空

作为结束语,如果进程连接到控制终端,作为用户,您将在终端上看到进程数据的多个输出行以及错误消息。同样,当您关闭控制终端时,您的进程和子进程将被终止。

重要的是,如果对此主题有任何疑问或评论,请使用下面的评论表与我们联系。