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

标签 node.js process electron

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

相关文章:

linux - pid真的是唯一的吗

c# - 从另一个程序读取标准输出

css - 在本地运行的 Web 应用程序中,加载字体是否会影响性能?

javascript - 无法理解 ElectronJS 中 webContents 中的 `sendInputEvent `

javascript - 从 Node fs 模块中的绝对路径读取本地文件

javascript - 为什么 Yield 不能与请求模块一起使用?

javascript - 在 npm 安装/更新期间自动编译文件

javascript - 访问 json 变量 (node.js)

node.js - 在 NodeJS 中使用 Microsoft 365 电子邮件服务器发送电子邮件

java - 为什么我们在启动 jvm 时指定最小和最大堆内存