【问题标题】:Qt QProcess::kill() not kill the processQt QProcess::kill() 不会杀死进程
【发布时间】:2021-09-29 17:35:08
【问题描述】:

我在 Qt 中开发了一个 GUI 应用程序。

这会运行一个带有 QProcess 的 Python 程序。 在myapp.h 文件中是公关定义:

QProcess *pr = new QProcess(this);

在构造函数中是这样的:

QString file = "program/path.py";
pr->start("[...]/Programs/Python/Python38-32/python.exe", QStringList() << file);

而析构函数有这样的代码:

pr->kill();
delete ui;

如果我运行这个程序,我没有错误。我关闭了窗口,但这个过程仍然运行,但我不知道为什么。

我在 Windows 中工作。

【问题讨论】:

  • QProcess::kill() 在 Windows 上使用 TerminateProcess。我会说你的代码没有运行。你用调试器检查了吗?

标签: c++ qt c++11 qt5 qprocess


【解决方案1】:

我测试了这个例子并且 kill() 有效。

也许你的进程已经在你的系统中启动了,启动功能没有正常工作。

试试这个: 我有 2 个按钮用于启动和终止进程:

ma​​inwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>

QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow: public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

private slots:
    void  on_pb_start_clicked();

    void  on_pb_kill_clicked();

private:
    Ui::MainWindow *ui;
    QProcess       *pr;
};

#endif // MAINWINDOW_H

ma​​inwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void  MainWindow::on_pb_start_clicked()
{
    pr = new QProcess(this);

    pr->start("vlc");
}

void  MainWindow::on_pb_kill_clicked()
{
    pr->kill();
}

输出:

【讨论】:

  • 感谢您长期以来的帮助!我对此进行了测试,它可以与 vlc 或 PuTTY 一​​起使用。但是对于 python 代码,它不是。所以我认为问题出在python中,例如异常。我在这里试试。