接收 SIGINT 时未记录子进程



我正试图杀死Node.js中以前分叉的子进程。我不确定它是否有效,因为我的console.log行在子进程中没有被命中。

这是我从家长那里打来的电话:

console.log("sending SIGINT from main");
child.kill("SIGINT");

在孩子身上:

process.on("SIGINT", () => {
console.log("Killing bot");
DBS.Bot.destroy();
process.exit();
});

我看到的唯一控制台日志来自父级。

当生成NodeJS子进程时,该子进程的stdout与父进程的stdout流不同,这就是为什么您看不到任何日志输出的原因。您可以添加以下代码将子进程的任何输出复制到主进程的stdout流:

child.stdout.on ("data", (data) => {
console.log ("child process: " + data.toString ());
});

在某些情况下,还可以捕获stderr输出,这是NodeJS的console.err ()写入的流:

child.stderr.on ("data", (data) => {
console.log ("child process error: " + data.toString ());
});

此外,为了确保子进程退出时带有非错误代码,即退出代码为0,您可以使用NodeJS的child_process"exit"信号:

child.on ("exit", (code, signal) => {
if (signal !== null) console.log ("child exited due to signal '" + signal + "'");
else console.log ("child exited with code " + code);
});

有关更多信息,请务必查看NodeJS在child_process上的文档。

最新更新