Mat*_*tty 9 javascript fork daemon node.js
关于如何在NodeJS中创建守护进程,我有点困惑
我在调用之前在C中创建了守护进程,fork()它继续执行在子进程中进行调用的地方,允许父进程终止.我不能轻易地使用process.fork()和实现相同的效果process.kill().
以下代码不符合我的预期和中断:
var current_pid, cp = require('child_process');
current_pid = process.pid;
cp.fork('');
process.kill(current_pid);
Run Code Online (Sandbox Code Playgroud)
发出以下错误,我无法弄清楚为什么或发生了什么:
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)
Run Code Online (Sandbox Code Playgroud)
问题调用似乎是process.kill().删除它,两个进程继续愉快地运行.
我知道daemon.node,但这是在child_process.fork()不存在时创建的(v0.1.33是编写daemon.node时可用的版本).现在有一种本地方式来分叉,所以这不再是必要的.(另外,它似乎也被抛弃了.)
child_process.fork()有一个完全误导性的名称,与C的不同fork().
根据文档,它将Node.js脚本作为子进程执行,并在调用进程和子进程之间建立通信通道.而已.
子进程的实际产生是在C中的Node的"平台层" libuv内完成的,并且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);
Run Code Online (Sandbox Code Playgroud)
显然,这是非常不同的fork().如果daemon.node适合您,请继续使用它.
| 归档时间: |
|
| 查看次数: |
4988 次 |
| 最近记录: |