如何从 bash 运行程序而忽略其标准输出,以便我可以运行更多程序?

如何从 bash 运行程序而忽略其标准输出,以便我可以运行更多程序?

我想做的是从内部创建一个新进程,bash就像什么都没发生一样,除了我的终端位于下一行,该进程通常会窃取我的标准输出......

假设我apt-get update现在想要,但我想编辑一些配置文件而不是观看所有内容下载,所以我想运行vi /some/config.我应该能够同时完成这两件事,对吗?

只是为了澄清,因为我在询问之前做了一些阅读,我希望这个进程在终端关闭后继续存在[如果它还没有结束]所以我想这不是一个子进程,可能不是一个子进程-贝壳,也许是叉子?我的意思是叉子吗?我如何像这样分叉?

答案1

听起来您正在寻找如何在后台运行进程,让您同时继续其他工作。这是通过在命令末尾添加 & 符号来实现的。例如,运行后几毫秒,sleep 5h您可以在后台命令执行其操作时输入另一个命令。为了使进程在终端关闭后继续存在,您必须使用 来孤立它disown,并且看不到标准输出(或标准错误),您可以使用重定向。看流程管理作业控制以获得优秀的文档。

或者,您可以在前台运行命令,然后启动另一个终端来执行其他操作。操作系统负责剩下的事情。

答案2

“< /dev/null”正在从 /dev/null 读取标准输入 - 正常重定向输入。它立即返回 EOF,即它正在从空文件中读取。对于您有时想从 STDIN 读取数据的情况,这是一个有用的习惯用法,但在这种情况下则不然。

答案3

我相信您正在寻找setsid在新会话中启动程序的命令。所以你可以:

setsid apt-get update

而且,如果你想让他们apt-get update保持沉默:

setsid apt-get update >/dev/null 2>&1

好处是setsid,以这种方式启动的进程将在终端关闭后继续。

答案4

nohup apt-get update > /dev/null 2> /dev/null < /dev/null & vi /some/config

https://en.wikipedia.org/wiki/Nohup#Overcoming_hanging

从技术上讲,nohup 意味着 stdin 是 /dev/null,因此< /dev/null不需要

相关内容