Bash 脚本启动“孤立”后台进程

Twi*_*geh 3 shell-script

我正在尝试做的事情:

我正在尝试生成一个后台进程并将其输出重定向到 VSC 的 shell。此后台进程应该独立于父 shell,因为 VSC 将等待生成它的 shell(父 shell)发送退出代码。

启动Webpack.sh

#!/bin/bash
echo "Starting webpack-dev-server"
cd .. && cd client && yarn debug
Run Code Online (Sandbox Code Playgroud)

命令

./startWebpack.sh &
Run Code Online (Sandbox Code Playgroud)

我在做什么 :

按照本指南,我应该能够通过在&脚本后面附加 a 来生成后台进程。它似乎并没有使脚本独立于父级。

父 shell 似乎接管了后台进程的输出,并且从不发送退出信号。杀死父 shell 也会杀死后台进程。

将输出发送到/dev/nullwith./startWebpack.sh > /dev/null没有任何区别。我实际上仍然可以看到该命令的输出。

bash -c ./startWebpack.sh & VSC 使用source在内部运行该命令。不确定这是否会影响任何事情。

Art*_*nov 6

使用nohup例如 nohup ./startWebpack.sh &> /dev/null &

这是 Bash 语法,对于其他 shell,您可以 nohup ./startWebpack.sh >/dev/null 2>&1 &

您也可以手动执行此操作,例如

$ ./startWebpack.sh &
$ disown
Run Code Online (Sandbox Code Playgroud)

  • 注意`nohup command`和`command; disown` [不是同一件事](https://unix.stackexchange.com/q/3886/22222)。当然,两者都应该在这里工作,但是“nohup”可能更符​​合OP的要求。 (2认同)
  • @Twiggeh 我在之前的评论中给出的链接是一个非常好的开始:[nohup、disown 和 & 之间的区别](https://unix.stackexchange.com/q/3886)。另请参阅 [Do \`disown -h\` 和 \`nohup\` 的工作效果相同吗?](https://unix.stackexchange.com/q/484276),作为总结,[“& disown”之间的差异和“nohup & disown”](https://askubuntu.com/q/611968)。 (2认同)