避免 QProcess 被杀死 (QProcess: Destroyed while process is still running)
Posted
技术标签:
【中文标题】避免 QProcess 被杀死 (QProcess: Destroyed while process is still running)【英文标题】:Avoid QProcess being killed (QProcess: Destroyed while process is still running) 【发布时间】:2021-02-26 07:17:00 【问题描述】:我试图运行这段代码:
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 文件?
【问题讨论】:
【参考方案1】:您可能在完成之前调用了destructor of QProcess
,这会杀死文档中提到的进程。请注意,当process
超出范围时会调用析构函数。
存在不同的解决方案:
等待进程完成:waitForFinished
process.waitForFinished (-1); // -1 = no time out
在堆栈上构造QProcess
QProcess *process = new QProcess();
...
请注意,您应该在完成后销毁该进程以避免内存泄漏。在构造期间指定 parent
可能有助于自动管理 QProcess
的生命周期。
以分离模式启动进程:startDetached
...
process.startDetached ();
如果调用进程退出,分离的进程将继续运行,不受影响。
也可以使用QProcess::startDetached
的静态重载。
【讨论】:
以上是关于避免 QProcess 被杀死 (QProcess: Destroyed while process is still running)的主要内容,如果未能解决你的问题,请参考以下文章
QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务
如何杀死由 Qt QProcess 运行的 MATLAB 批处理?