在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适合你,请继续使用它。
daemon.node继续在https://github.com/indexzero/daemon.node开发。