在本指南中,我们将揭示Linux系统中进程处理的一个简单但重要的概念,即如何将进程与其控制终端完全分离。
当Linux进程与终端关联时,可能会出现两个问题:
- 您的控制终端充满了如此多的输出数据和错误/诊断消息。
- 如果终端关闭,该进程及其子进程将被终止。
为了解决这两个问题,您需要将进程与控制终端完全分离。在我们实际解决问题之前,让我们简单介绍一下如何在 Linux 中后台运行进程。
目录
在后台运行 Linux 命令或进程
如果某个进程已经在执行,例如下面的tar 命令示例,只需按Ctrl+Z
即可停止它,然后输入命令bg
以继续在后台作为作业执行。
您可以通过输入查看所有后台作业jobs
。然而,它的stdin、stdout和stderr仍然连接到终端。
$ tar -czf home.tar.gz 。 $ 背景 $ 职位
![](https://www.alaica.com/wp-content/uploads/linux-201.png)
您还可以使用 & 符号在后台运行 Linux 进程&
。
$ tar -czf home.tar.gz 。& $ 职位
![](https://www.alaica.com/wp-content/uploads/linux-202.png)
看一下下面的示例,尽管tar 命令是作为后台作业启动的,但错误消息仍然发送到终端,这意味着进程仍然连接到控制终端。
$ tar -czf home.tar.gz 。& $ 职位 tar: ./.config/etcher: 无法打开: 权限被拒绝
![](https://www.alaica.com/wp-content/uploads/linux-203.png)
注销后保持 Linux 进程运行
我们将使用disown命令,该命令在进程执行并置于后台后使用,其工作是将 shell 作业从 shell 的活动列表作业中删除,因此您将不再对该特定作业使用fg
,命令。bg
此外,当您关闭控制终端或注销时,作业不会挂起或向任何子作业发送SIGHUP 。
让我们看一下下面使用bash 内置函数diswon的示例。
$ sudo rsync 模板/* /var/www/html/files/ & $ 职位 $ 否认 -h %1 $ 职位
![](https://www.alaica.com/wp-content/uploads/linux-204.png)
您还可以使用该nohup
命令,该命令还允许进程在用户退出 shell 时继续在后台运行。
$ nohup tar -czf iso.tar.gz 模板/* & $ 职位
![](https://www.alaica.com/wp-content/uploads/linux-205.png)
从终端分离 Linux 进程
因此,要将进程与控制终端完全分离,请使用以下命令格式,这对于Firefox 等图形用户界面 ( GUI ) 应用程序更为有效:
$ 火狐</dev/null &>/dev/null &
在 Linux 中,/dev/null是一个特殊的设备文件,它会注销(删除)写入其中的所有数据,在上面的命令中,读取输入,并将输出发送到/dev/null。
作为结束语,如果进程连接到控制终端,作为用户,您将在终端上看到进程数据的多个输出行以及错误消息。同样,当您关闭控制终端时,您的进程和子进程将被终止。
重要的是,如果对此主题有任何疑问或评论,请使用下面的评论表与我们联系。