如何在qt中停止分离的进程

How to stop a detached process in qt?

本文关键字:分离 进程 qt      更新时间:2023-10-16

使用QProcess::startDetached启动进程后,如何停止它?

假设主程序运行,然后启动独立运行的分离进程。用户关闭主程序,然后再次打开主程序并想要停止进程。我怎样才能找到这个过程,然后停止它呢?

是否有一种方法可以防止应用程序从相同的过程两次?

不,它将与您的应用程序解耦。您可以获得它的PID,然后在Linux上发送SIGSTOP,但这是特定于平台的,没有POSIX支持就无法工作,就像msvc一样。您需要在其中手工制作您的版本。

是否有一种方法可以防止应用程序从相同的过程两次?

是的,通过在分离进程中使用锁文件。如果这个分离的进程碰巧至少部分是用Qt编写的,你可以使用QLockFile类。

如果您碰巧分离了一些特定于平台的进程,那么您肯定会再次出现相同的问题。

我想出来的答案是:

我首先启动生成唯一id的分离进程。该进程每次运行时都会写入文件(是1分钟计时器)。当它运行时,它将自己的id写入一个文件。然后,如果碰巧有另一个运行了,如果它看到前一个运行了,它就把它的id写入文件而不运行,然后,当下一个运行时,它会看到它的id是否已经在文件中,如果是,它会关闭自己并清除文件,然后下一个运行结束,是唯一一个运行的。这可能最终会跳过一些时间。

您也可以添加时间戳,因为这可能表明它最近没有运行,并有助于决定是否关闭它。问题是,如果我只是把id写入一个文件,当我关闭手机时,文件会说它还在运行。这同样适用于崩溃