不要使用 QProcess 实例来检测外部编辑器 GUI 程序的状态
altairwei opened this issue · comments
Altair Wei commented
如果使用 QProcess 实例启动外部的 GUI 程序,而不是使用 startDetached()
来启动,并且你想监听 QProcess::finished
信号。对于普通的命令行程序来说,这样做没有任何问题,因为命令行就是这样设计的。但是对于 GUI 程序来说,它们就不会遵循命令行程序的那套约定。比如 Typora 在打开第二个文档时如果检测到之前的 Typora 进程,后一个进程就会直接退出,然后在前一个实例的进程中启动一个新的 GUI 界面。
下图是开启第一个 Typora 的进程树:
下图是开启第二个 Typora 的进程树:
可以看出,进程树中多了一个 render 进程。而且,多次打开同一个文件并不会启动多个 Typora ,而是定向到同一个。
VSCode 在打开第二个文档时甚至都不开启一个新的 render 进程,而是直接打开一个标签页。 只有 Mousepad 会打开多个进程。