【问题标题】:Avoid QProcess being killed (QProcess: Destroyed while process is still running)避免 QProcess 被杀死 (QProcess: Destroyed while process is still running)
【发布时间】:2023-11-16 16:44:01
【问题描述】:

我试图运行这段代码:

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 文件?

【问题讨论】:

    标签: java c++ qt cmd qprocess


    【解决方案1】:

    您可能在完成之前调用了destructor of 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 的静态重载。

    【讨论】: