我对如何在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()
不存在的时候创建的(在编写daemon.node时,v0.1.33是可用的版本)。现在有了一种原生的派生方式,所以这应该不再是必要的。(另外,它似乎也被放弃了。)
2条答案
按热度按时间mwngjboj1#
daemon.node将继续在https://github.com/indexzero/daemon.node上开发。
2ekbmq322#
child_process.fork()
有一个完全误导的名称,与C的fork()
不同。根据文档,它将Node.js脚本作为子进程执行,并在调用进程和子进程之间建立通信通道。
子进程is done inside libuv(Node的“平台层”)在C语言中的实际生成过程以及
fork()
本身并没有暴露给Node脚本。一种简单的、可以改进的方法是只使用Node.js内置的东西来设置守护进程,如下所示:
显然,这与
fork()
有很大的不同,如果daemon.node对您有用,请继续使用它。