node.js - 即使 detached 设置为 true,父进程也会杀死子进程

标签 node.js macos process

我对此感到非常困惑,并且几个月来一直在努力寻找解决方案。我在 OSX 上。

我听说使用 child_process.spawn 并将 detached 选项设置为 true,将启动子进程作为新进程组的领导者,如果父进程退出,子进程可能会继续运行。然而,我从未亲眼目睹过任何证据。

https://nodejs.org/api/child_process.html

例如:

const n = cp.spawn('node', ['watch-transpile.js'], {
    detached: true,
    stdio: ['ignore']
});

上面是由父级执行的,如果我们运行$ ps aux | grep Node

我们得到:

Olegzandr        2546   0.0  0.2  3048544  19564   ??  Ss   11:29PM   0:00.09 node lib/transpile/watch-transpile.js

Olegzandr        2541   0.0  0.7  3115684  60216 s000  S+   11:29PM   0:01.47 node index -t -a -w

但是当我使用 control-c 杀死父进程时,子进程和父进程都会终止。

如何用node真正创建一个独立于父进程的后台进程?这简直要了我的命!

最佳答案

啊哈!当然。那些愚蠢的 Node 文档!

这有效。

        const n = cp.spawn('node', ['lib/transpile/watch-transpile.js'], {
            detached: true,
            stdio: ['ignore', 'ignore', 'ignore']
        });

您显式忽略每个 stdio 流,而不仅仅是使用“忽略”一次;文档没有直接提到这一点,但考虑到 stdio 属性是一个数组,这是有道理的。

在 Github 上查看此问题:https://github.com/nodejs/node/issues/7269#issuecomment-225698625

关于node.js - 即使 detached 设置为 true,父进程也会杀死子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37427360/

相关文章:

node.js - 无法从 NodeJS 的回调函数返回数据

html - 在 Mac 上测试 IE 网页设计的最佳方式?

python:运行超时进程并捕获stdout、stderr和退出状态

c - 与 fork() 共享变量

java - 无法读取控制台值 Java

node.js - 子文件夹 View expressjs 3x/nodejs

node.js - socket.io 一直出现 404ing?

javascript - 为什么函数getPrice()仅调用一次?

python - MacOSX 上带有 python 的 Sublime Text 3 -- 模块缺少其方法

python - ctypes:使用 lib.so(在 Mac 上)时指针地址修改,但在使用 lib.dll(在 Windows 上)时不修改