杀死 Node.js 中的子进程

问题描述 投票:0回答:1

如果子进程陷入无限循环,则永远不会处理“退出”事件。 在这种情况下你如何强迫工人停下来?

"use strict";

(async () => {
    const cluster = require("cluster");

    if (cluster.isMaster) {
        const worker = cluster.fork()
            .on("exit", () => {
                console.log("ici!!!");
            })
        ;
        
        await new Promise(resolve => setTimeout(resolve, 2_000));
        
        worker.kill("SIGINT");
    }
    else {
        while (true);
    }
})();
node.js cluster-computing kill
1个回答
0
投票

这里是使用带有“SIGTERM”信号的worker.process.kill()方法来终止的示例代码

"use strict";

(async () => {
    const cluster = require("cluster");

    if (cluster.isMaster) {
        const worker = cluster.fork();

        worker.on("exit", (code, signal) => {
            if (code !== 0) {
                console.log(`Worker process exited with code ${code}, signal ${signal}`);
                // You can choose to respawn the worker here if needed.
            }
        });

        await new Promise(resolve => setTimeout(resolve, 2000));

        // Send a SIGTERM signal to forcefully terminate the worker process.
        worker.process.kill("SIGTERM");
    } else {
        while (true);
    }
})();
© www.soinside.com 2019 - 2024. All rights reserved.