在NodeJS中分叉

对于如何在NodeJS中创build守护进程,我有点困惑

我在C中创build了守护进程,然后调用fork() ,继续执行从subprocess调用的地方,允许父进程终止。 使用process.fork()process.kill()我不能轻易实现同样的效果。

下面的代码不会做我所期望和破坏的:

 var current_pid, cp = require('child_process'); current_pid = process.pid; cp.fork(''); process.kill(current_pid); 

下面的错误发出,我不能解决为什么或发生了什么:

 node.js:202 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: read EBADF at errnoException (net.js:589:11) at Pipe.onread (net.js:335:20) 

问题调用似乎是process.kill() 。 除去这两个进程继续愉快地运行。

我知道daemon.node ,但这是在child_process.fork()不存在的时候创build的(v0.1.33是daemon.node写入时可用的版本)。 现在有一个本地的方式来分叉,所以这不应该是必要的。 (另外,它似乎也被放弃了。)

child_process.fork()有一个完全误导性的名字,和C的fork()不一样。

根据文档 ,它执行Node.js脚本作为subprocess,并在调用进程和subprocess之间build立通信通道。 而已。

subprocess的实际产生在libuv ,C的Node中的“平台层”中完成,并且fork()本身不会暴露给Node脚本。

使用Node.js中内build的东西来守护进程的一个简单的,可改进的方法可能如下所示:

 if (process.argv[2] !== 'child') { require('child_process').execFile(process.argv[0], [__filename, 'child']); process.exit(); } setTimeout(function(){ console.log('foo'); }, 5000); 

显然,这与fork()非常不同。 如果daemon.node适合你,请继续使用它。