首页 > 解决方案 > 生成的进程退出时,Node.JS ChildProcess.on('exit') 不会被命中

问题描述

我有一个用 C++ 编写的可执行文件,可以在数据文件上运行计算。根据内容,这些计算可能需要几秒钟到半个多小时。我有一个 Electron 应用程序启动这个可执行文件并等待它完成。我的代码在渲染过程中,它看起来像:

this.exec = spawn(exeLocation, ['run', '-f', 'input file.dat']);

this.exec.stdout.on('data', doSomethingWithOutputData);
this.exec.stderr.on('data', doSomethingWithErrorData);

this.exec.on('exit', (code) => {
  console.log(`exit with code ${code}`);
  markExecTerminated();
});

this.exec.on('close', (code) => {
  console.log(`close with code ${code}`);
  markExecTerminated();
});

我遇到的问题是,当可执行文件需要几秒钟或几分钟时,回调exitclose被击中,但是当它花费半个小时以上时,相同的回调永远不会被调用。

(请注意,最初我只处理close事件。我添加exit事件处理程序只是为了查看它是否会被调用。)

我完全被这种行为难住了。我本来期望始终如一的失败或成功,但不是由外部 exe 运行所需的时间驱动的。

我正在寻找有关为什么会发生这种情况和/或如何在外部 exe 完成时始终收到通知的建议。

标签: javascriptnode.jselectronexitchild-process

解决方案


推荐阅读