gpt4 book ai didi

javascript - 被 fork 的 child_process 可以成为父进程并也 fork 新进程吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:46 25 4
gpt4 key购买 nike

在我的 Electron 应用程序的用户界面 (UI) 中,有一个按钮,单击该按钮时会使用 child_process.fork()启动另一个脚本。这个新 child 使用 process.send() 传达状态消息更新 UI 的进度。 这一切都很好

然而,在子进程中,会出现一个需要并行执行某些工作的时刻(第 6 阶段)。在 Stage6 中,我使用相同的 child_process.fork() 方法来启动 8 个工作进程。调试消息表明这 8 个工作进程确实 fork 得很好;我在数组中保存了对它们的引用,一切看起来都很好。

问题是,一旦这 8 个工作线程被 fork ,我就再也没有收到他们的消息。 Stage6 永远不会收到他们使用 process.send() 发送的消息。就像它们不存在一样。

现在,这是有趣的部分!在 Electron 的外部,我创建了一个测试脚本(使用 CLI 上的 Node)来启动这 8 个工作进程,与 Stage6 的方式完全相同,它们工作得很好,并且测试脚本听到他们的消息。所以问题不在于 worker ,而在于他们是如何启动的。

在 Electron 中,一个本身 fork 的进程(在我的例子中是从 UI)也可以成为“父进程”并 fork 子进程吗?我们可以在 fork 里面 fork 吗?还是 fork 太多了?

最佳答案

是的,子进程也可以是“父进程”并派生另一个子进程。 OP的问题一定在其他地方。考虑这三个文件:

1.js

const cp = require("child_process");
const path = require("path");

console.log(`[f1] 1 has started; now forking 2...`);

let f2 = cp.fork(path.normalize(`${__dirname}\\2`));

f2.on("message", (message) => {
console.log(`[f2] ${message}`);
});

f2.on("exit", () => {
console.log(`[f1] f2 just exited, so 1 is too.`);
});

2.js

const cp = require("child_process");
const path = require("path");

process.send(`This is 2 starting up; now forking 3`);

let f3 = cp.fork(path.normalize(`${__dirname}\\3`));

f3.on("message", (message) => {
console.log(`[f3] ${message}`);
});

f3.on("exit", () => {
console.log(`[f2] f3 just exited, so I am too.`);
process.exit();
});

3.js

process.send(`This is 3 starting up, and now shutting down`);
process.exit();

运行“node 1.js”会产生以下输出,这证明2.js既可以是1.js的子进程,也可以是3.js的父进程

[f1] 1 has started; now forking 2...
[f2] This is 2 starting up; now forking 3
[f3] This is 3 starting up, and now shutting down
[f2] f3 just exited, so I am too.
[f1] f2 just exited, so 1 is too.

关于javascript - 被 fork 的 child_process 可以成为父进程并也 fork 新进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45007998/

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