如果子进程陷入无限循环,则永远不会处理“退出”事件。 在这种情况下你如何强迫工人停下来?
"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);
}
})();
这里是使用带有“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);
}
})();