我对如何在NodeJS中创建守护进程感到有点困惑
我在调用fork()
之前在C中创建了守护进程,它继续执行在子进程中进行调用的地方,允许父进程终止。我无法使用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()
不存在时创建的(v0.1.33是编写daemon.node时可用的版本)。现在有一种本地方式来分叉,所以这不再是必要的。 (另外,它似乎也被抛弃了。)
答案 0 :(得分:9)
child_process.fork()
有一个完全误导性的名称,与C的fork()
不同。
According to the docs,它作为子进程执行Node.js脚本,并在调用进程和子进程之间建立通信通道。就是这样。
在C中实际生成子进程is done inside libuv,Node的“平台层”,以及fork()
本身不会向Node脚本公开。
只使用Node.js内置的守护进程的一种简单,易于改进的方式可能如下所示:
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适合您,请继续使用它。
答案 1 :(得分:1)
daemon.node继续在https://github.com/indexzero/daemon.node开发。