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

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

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

我用exec成功执行了这个进程,但是我需要subprocess独立于父进程,所以父进程可以不等待subprocess而退出,因此我试着用detached: true, stdio: 'ignore'出来的spawn进行尝试detached: true, stdio: 'ignore' unref()unref()过程:

将options.detached设置为true可以使subprocess在父进程退出后继续运行。

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

这产生了:

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

遇到麻烦实现这个spawn和阅读文件再次我想我应该实际使用fork

child_process.fork()方法是child_process.spawn()的一个特例,专门用于产生新的Node.js进程。

fork()没有采取一个命令作为其第一个参数,但是我似乎无法适应的模块,因为我试图作为一个subprocess运行的脚本modulePath在当前正在运行的进程的目录,但在一个他的依赖。

回到起始TL; DR – 如何分叉一个位于当前正在运行的进程之外的进程?

任何帮助将非常感激!

编辑:

提供spawn ENOENT错误的解决scheme也可能非常有用!

下面的代码应该允许你做你需要的。

 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);