gpt4 book ai didi

node.js - 接收SIGINT时子进程未记录

转载 作者:行者123 更新时间:2023-12-03 12:40:56 29 4
gpt4 key购买 nike

我正在尝试杀死Node.js中以前 fork 的子进程。我不确定它是否正常工作,因为在子进程中未命中我的console.log行。

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

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

而在 child 中:
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);
});

有关更多信息,请确保 checkout NodeJS' documenation on child_process

关于node.js - 接收SIGINT时子进程未记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61036986/

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