Javascript 生成的进程退出时(';exit';)上的Node.JS ChildProcess.on不会被命中 我有一个C++执行文件,它运行数据文件的计算。根据内容的不同,这些计算可能需要几秒钟到半个多小时。我有一个电子应用程序正在启动这个可执行文件并等待它完成。我的代码正在渲染过程中,看起来像: 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',(代码)=>{ log(`exit with code${code}`); markExecTerminated(); }); this.exec.on('关闭',(代码)=>{ log(`close with code${code}`); markExecTerminated(); });

Javascript 生成的进程退出时(';exit';)上的Node.JS ChildProcess.on不会被命中 我有一个C++执行文件,它运行数据文件的计算。根据内容的不同,这些计算可能需要几秒钟到半个多小时。我有一个电子应用程序正在启动这个可执行文件并等待它完成。我的代码正在渲染过程中,看起来像: 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',(代码)=>{ log(`exit with code${code}`); markExecTerminated(); }); this.exec.on('关闭',(代码)=>{ log(`close with code${code}`); markExecTerminated(); });,javascript,node.js,electron,exit,child-process,Javascript,Node.js,Electron,Exit,Child Process,我遇到的问题是,当可执行文件需要几秒钟或几分钟时,exit和close的回调会被命中,但当它需要半小时以上时,就不会调用相同的回调 (请注意,最初我只处理close事件。我添加了exit事件处理程序,只是想看看它是否会被调用。) 我完全被这种行为难住了。我本以为会有一致的失败或成功,但这并不是由外部exe运行的时间决定的 我正在寻找有关发生这种情况的原因和/或如何在外部exe完成时始终得到通知的建议。您是否有机会测试在不同平台上是否发生相同情况?例如,在Windows、Linux或macOS上?

我遇到的问题是,当可执行文件需要几秒钟或几分钟时,
exit
close
的回调会被命中,但当它需要半小时以上时,就不会调用相同的回调

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

我完全被这种行为难住了。我本以为会有一致的失败或成功,但这并不是由外部exe运行的时间决定的


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

您是否有机会测试在不同平台上是否发生相同情况?例如,在Windows、Linux或macOS上?如果运行可执行文件时使用的输入导致了shell中的这种行为,那么可执行文件是否正确退出?可执行文件本身是否可能存在导致进程无法正确退出的错误?如果你听到
this.exec.on('error',err=>{})
,你会得到什么吗?如果你得到子进程的PID(
console.log(this.exec.PID)
),你会在
ps aux | grep
中看到进程吗,即使在可执行文件已经退出之后?如果
close
/
exit
从未被调用,您是否仍然可以通过stdout/stderr获得预期的数据?