QProcess 终止进程树

Posted

技术标签:

【中文标题】QProcess 终止进程树【英文标题】:QProcess terminate process tree 【发布时间】:2015-07-06 14:00:09 【问题描述】:

我目前正在开发一个使用 Qt5.4 和 C++ 的项目。 在这个项目中,我使用 QProcess 类启动和停止进程。

我现在正在扩展项目以启动批处理文件。问题是我想使用 QProcess 终止/终止使用批处理文件启动的进程。 调用终止不起作用(或者我可能调用错了)

编辑: QProcess 是一个名为 ProcessHolder 的类的成员(指针)。 startProcess() 和 stopProcess() 处理进程。

bool ProcessHolder::startProcess(const QString &path, 
                                 const QStringList  &args) 
    process_->start(path, args);
    qDebug() << process_->errorString();
    if(process_->waitForStarted(1000)) 
        state_ = ProcessState::running;
        return true;
     else 
        state_ = ProcessState::fail;
        return false;
    


bool ProcessHolder::stopProcess() 
    process_->terminate();
    state_ = ProcessState::notRunning;
    return true;

请帮帮我, 本

【问题讨论】:

“调用终止不起作用” - 这取决于你如何调用 QProcess。例如,如果您使用静态函数 QProcess::execute,那么它当然不会工作。我建议你展示你正在尝试做的示例代码。 【参考方案1】:

所以 Qt 没有为这类问题提供答案。 Windows 似乎没有正确实现进程树。

您可以使用CreateToolhelp32Snapshot 查看所有进程和父进程。

然后你必须建造一棵树并手动擦除它。您可以使用 QProcess::processID() 来获取该树的根进程。

【讨论】:

以上是关于QProcess 终止进程树的主要内容,如果未能解决你的问题,请参考以下文章

如何确定在 Linux 上使用 Qt4 终止 QProcess 的信号?

当进程结束时,如何保持QProcess执行的命令?

使用 QProcess 通过 PyQt 运行和监控系统进程

即使进程终止,waitpid 总是返回 -1

QProcess 无法启动进程:未找到进程

QT软件开发: QProcess启动进程完成交互并获取输出