如何重新启动 Node.js 应用程序并将新进程移交给控制台

For*_*vin 5 console process child-process node.js

以下 Node.js 脚本可以自行重启,甚至仍会打印到正确的控制台(或终端,如果您愿意),但它将不再在前台运行,因为您无法再使用 Ctrl+C 退出它(见截图)等:

console.log("This is pid " + process.pid);
setTimeout(function () {
    process.on("exit", function () {
        require("child_process").spawn(process.argv.shift(), process.argv, {
            cwd: process.cwd(),
            detached : true,
            stdio: "inherit"
        });
    });
    process.exit();
}, 5000);
Run Code Online (Sandbox Code Playgroud)

我已经尝试过detached: truevs detached: false,但显然这并没有解决问题......

有没有办法让新的节点进程在前台运行,代替旧的?或者这是不可能的?

我知道在 Bash 中你可以像这样从后台拉回一个程序:

  $ watch echo "runs in background" &
  $ fg # pulls the background process to the foreground
Run Code Online (Sandbox Code Playgroud)

但我不是在寻找 Bash 命令左右,而是在 Node.js 脚本中寻找可在任何平台上运行的程序化解决方案。

在此处输入图片说明

Jon*_*nny 3

不,一旦进程退出,它就不能再执行任何操作,而且我听说过的终端上不存在“请在我退出后将其置于前台”类型的 API。

解决这个问题的正确方法是通过一个包装器来监视您的进程是否出现故障并重新启动。然后,包装器可以控制 stdio 并将其传递给其子级。

您可以通过一个简单的bash循环、另一个node脚本来实现此目的,或者您可以利用NodeJS 集群模块来实现此目的。