如何启动分离进程并等待父进程终止?

时间:2015-09-25 08:56:10

标签: qt qprocess

使用QProcess实现更新程序我从应用程序启动一个分离进程并立即退出。在生成的更新程序进程中,我将根据需要覆盖文件,然后再次启动主应用程序。问题是,如果主应用程序没有快速关闭"文件的更新有时会失败。在更新程序开始覆盖它们之前释放所有已加载的库。一种方法是等待任意数量的时间,如1秒,然后开始更新,但我宁愿实现一些实际检查父进程是否不再运行的东西。我可以在生成它时传递它的ID,但这并没有真正削减它,因为似乎没有bool QProcess::isRunning(qint64 pid)之类的功能。我也不认为可以通过应用程序连接信号和插槽......任何想法?

1 个答案:

答案 0 :(得分:4)

您可以在两个应用程序中使用QSystemSemaphore类来等待。

应用程式:

int main()
{
  QSystemSemaphore sem( "some_uuid", 1, QSystemSemaphore::Create );
  sem.acquire();
  // ...
  app.exec();

  // TODO: start updater
  // sem.release(); // not sure, that it will not be done automatically
  return 0;
}

更新

int main()
{
  QSystemSemaphore sem( "some_uuid", 1, QSystemSemaphore::Open );
  sem.acquire(); // Will wait for application termination
  // ...
  app.exec();
  return 0;
}

你不应该忘记错误处理。你应该尝试打开和关闭文件" yourapp.exe"来自" updater.exe"完全访问以确保该应用程序已关闭。

对于100%的结果,可以使用特定于平台的API。