为什么用spawnSync执行命令时,后台运行命令的“&”不起作用

问题描述 投票:0回答:1

我正在尝试通过

spawnSync
执行shell脚本,我需要在后台运行命令之一,但“&”似乎被忽略了。

我的代码:

spawnSync(`echo "*** Begin" && npm run startServer & echo "*** End"`, {
        stdio: ["ignore", "pipe", "inherit"],
        encoding: "utf-8",
        shell: true,
    });

由于某种原因,命令

startServer
没有在后台执行,因此第二个 echo 命令永远不会执行。

注意:当我直接从 bash 运行上面的脚本时,它会按预期运行。

node.js shell spawn
1个回答
0
投票

我不确定nodeJS和spawnSync的细节,但是你本质上是想将你的服务器命令与当前的shell进程解除关联。

您可以通过在 npm 命令前面添加

nohup

来实现此目的
echo "*** Begin" && nohup npm run startServer & echo "*** End"

由于您尝试与 npm 命令并行运行 echo End 命令,因此它将在 Begin 之后立即执行 end 命令。此外,即使终端被终止,它也会保持命令运行。

© www.soinside.com 2019 - 2024. All rights reserved.