如何分叉另一个模块的进程

How to fork a process of another module

TL;DR:如何分叉一个位于当前 运行ning 进程之外的进程?

我正在尝试使用 child_process 的 Nodejs 以便在父进程退出时启动另一个 nodejs 进程。

我使用 exec 成功执行了进程,但我需要子进程独立于父进程,这样父进程就可以退出而不等待子进程,因此我尝试使用 spawn detached: true, stdio: 'ignore' 选项和 unref() 过程:

setting options.detached to true makes it possible for the child process to continue running after the parent exits.

spawn('node MY_PATH', [], {detached: true, stdio: 'ignore'}).unref();

这会产生 :

node MY_PATH ENOENT 错误。不幸的是我没能解决。

在使用 spawn 遇到困难并再次阅读 documentation 之后,我认为我应该实际使用 fork:

The child_process.fork() method is a special case of child_process.spawn() used specifically to spawn new Node.js processes.

fork() 没有将命令作为其第一个参数,而是一个 modulePath,我似乎不适合,因为我正在尝试将 运行 作为脚本子进程不在当前 运行ning 进程的目录中,而是在他的依赖项中。

回到开头 TL;DR - 如何分叉一个位于当前 运行ning 进程之外的进程?

如有任何帮助,我们将不胜感激!

编辑:

提供 spawn ENOENT 错误的解决方案也很有帮助!

下面的代码应该可以让你做你需要的。

var Path = require('path');
var Spawn = require('child_process').spawn;

var relative_filename = '../../node_modules/bla/bla/bla.js';

Spawn('node', [Path.resolve(__dirname, relative_filename)], {detached: true, stdio: 'ignore'}).unref();

process.exit(0);