我正在尝试杀死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/