javascript - 生成的进程退出时,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();
});
我遇到的问题是,当可执行文件需要几秒钟或几分钟时,回调exit
和close
被击中,但是当它花费半个小时以上时,相同的回调永远不会被调用。
(请注意,最初我只处理close
事件。我添加exit
事件处理程序只是为了查看它是否会被调用。)
我完全被这种行为难住了。我本来期望始终如一的失败或成功,但不是由外部 exe 运行所需的时间驱动的。
我正在寻找有关为什么会发生这种情况和/或如何在外部 exe 完成时始终收到通知的建议。
解决方案
推荐阅读
- c - C Linux内核页面干扰以前的变量
- database - 我们如何找到在 DB2 Activity Event Monitoring 中运行查询的表名?
- c# - 如何获取动态添加(值)的文本框值?
- dart - 限制选中复选框的数量
- php - 如何在 WHILE 循环内使用复选框在数据库中插入或更新值
- python - 如何给twisted服务器一个IP地址?
- arangodb - 无法在 3 节点 ArangoDB 集群中执行分片
- html - div内悬停图片触发动画
- c# - Xamarin 如何将代码 Syncfusion DocIO 移植到 NPOI Word
- intellij-idea - 如何安装 CodeNarc?