gpt4 book ai didi

javascript - 在 NodeJS 中 fork

转载 作者:IT老高 更新时间:2023-10-28 23:25:18 26 4
gpt4 key购买 nike

我对如何在 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 时可用的版本)。现在有一种本地的 fork 方式,所以这应该不再需要了。 (另外,它似乎也被遗弃了。)

最佳答案

child_process.fork() 有一个完全误导性的名称,与 C 的 fork() 不同。

According to the docs ,它作为子进程执行 Node.js 脚本,并在调用进程和子进程之间建立通信 channel 。就是这样。

子进程的实际产生is done inside libuv ,Node 的“平台层”,在 C 中,并且 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 适合您,请继续使用它。

关于javascript - 在 NodeJS 中 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com