避免QProcess被杀死(QProcess:在进程还在运行时被销毁)



我试着运行这段代码:

QProcess process;
process.setWorkingDirectory("D:\Programs\Qt\Units\MyJavaProjects\StackExp\target");
process.setProgram("java.exe");
process.setArguments({"-jar","StackExp-1.0-SNAPSHOT.jar"});
process.start();

和CMD不会打开,也不会执行。它只显示这条消息:

QProcess: Destroyed while process ("java.exe") is still running
谁知道出了什么事?我如何在QProcess中使用cmd运行我的.jar文件?

您可能在QProcess完成之前调用它的析构函数,这会杀死文档中提到的进程。注意,析构函数在process超出作用域时被调用。

存在不同的解:

  1. 等待进程完成:waitForFinished

    process.waitForFinished (-1); // -1 = no time out
    
  2. 在栈上构建QProcess

    QProcess *process = new QProcess();
    ...
    

    注意,应该在进程结束后销毁它,以避免内存泄漏。在构建过程中指定parent可能有助于自动管理QProcess的生存期。

  3. 以分离模式启动进程:startDetached

    ...
    process.startDetached ();
    

    如果调用进程退出,分离的进程将不受影响地继续运行。

    也可以使用QProcess::startDetached的静态重载。

最新更新