我想做的是从内部创建一个新进程,bash
就像什么都没发生一样,除了我的终端位于下一行,该进程通常会窃取我的标准输出......
假设我apt-get update
现在想要,但我想编辑一些配置文件而不是观看所有内容下载,所以我想运行vi /some/config
.我应该能够同时完成这两件事,对吗?
只是为了澄清,因为我在询问之前做了一些阅读,我希望这个进程在终端关闭后继续存在[如果它还没有结束]所以我想这不是一个子进程,可能不是一个子进程-贝壳,也许是叉子?我的意思是叉子吗?我如何像这样分叉?
答案1
答案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
不需要