如果我在命令提示符下运行 Electron exe,应用程序就会运行,但是当窗口关闭时,控制不会传递回命令提示符。
我必须按 Ctrl+C 然后才能重新获得控制权。
为了拦截窗口的关闭,我这样做:
app.on('window-all-closed', () => {
log.debug('window-all-closed' + os.EOL);
expectKill=true;
if (serverProcess) {
log.debug('Killing ' + serverProcess.pid + os.EOL);
const kill = require('tree-kill');
kill(serverProcess.pid, 'SIGTERM', function () {
serverProcess = null;
});
}
if (process.platform !== 'darwin') {
log.debug('app.quit()' + os.EOL);
app.quit();
}
return;
})
serverProcess
是一个衍生进程。我可以看到它被正确杀死了。
在日志中我可以看到:
app.quit()
Electron 应用程序创建的所有进程,包括上面提到的
serverProcess
和 Electron exe 本身都会从任务管理器中消失。
然而,控制权永远不会回来:
C:\Program Files\electron-app\bin>electron-app.exe
C:\Program Files\electron-app\bin>
19:15:06.566 > window-all-closed
19:15:06.575 > Killing 3144
19:15:06.589 > app.quit()
有时,如果我重新启动应用程序,我会遇到奇怪的问题:
C:\Program Files\electron-app\bin>electron-app.exe
C:\Program Files\electron-app\bin>
...应用程序此时挂起,我必须按 Ctrl+C 将其返回到 cmd.exe 控制。
为什么在调用
app.quit()
后没有将控制权交还给 cmd.exe?
看起来控制已经回到了cmd.exe。它已经打印了提示并等待您输入命令。之后,您的应用程序将一些日志消息打印到屏幕上并退出。没有任何东西挂起 - 输出看起来很混乱。
同时,cmd.exe 仍在等待您键入下一个命令。如果你按回车cmd.exe会打印一个新的提示,不需要输入ctrl+c。
这是带注释的输出:
C:\Program Files lectron-app > electro-app.exe
C:\Program Files lectron-app > <== THE PROMPT IS ALREADY HERE
19:15:06.566 > 窗口全部关闭
19:15:06.575 > 杀死 3144
19:15:06.589 > app.quit()