使用processId杀死进程

问题描述 投票:0回答:1

我有一个 Q_Object 类。 在本课程中,我想使用发送和停止函数来启动和停止进程

我的发送功能工作正常,当我单击它时,我的进程正在运行,但是当我单击停止功能时,它不工作,因为我无权访问 processId 我该如何解决这个问题??

class Simulator : public QObject
{
    Q_OBJECT
public:
    explicit Simulator(QObject *parent = nullptr);
    ~Simulator();
    EnvHandler *envHandler = new EnvHandler;

signals:


public slots:
    Q_INVOKABLE void send();
    Q_INVOKABLE void stop();
private:
    QProcess *m_process;
    qint64 pId;

};
#include "Simulator.h"
#include <QThread>
#include <iostream>
#include <thread>
#include <QTimer>
#include <fstream>


Simulator::Simulator(QObject *parent)
    : QObject{parent} , m_process(new QProcess(this))
{


}


void Simulator::send()
{
    QString path = envHandler->env_MERSAD_HOME() +"/Bin/Module/DataGenerator";
    m_process->startDetached(path);
     pId = m_process->processId();
}

void Simulator::stop()
{
   
    QString command = "kill -9 " + QString::number(pId);
    m_process->execute(command);
}



Simulator::~Simulator()
{

}
qml kill-process qprocess
1个回答
0
投票

问题似乎是您在进程分离后尝试检索进程 ID。您可以更改调用 startDetached 的方式,以便它为您提供 ID。那么你应该能够杀死它。

void Simulator::send()
{
    QString path = envHandler->env_MERSAD_HOME() +"/Bin/Module/DataGenerator";
    m_process->setProgram(path);
    m_process->startDetached(&pId);
}
© www.soinside.com 2019 - 2024. All rights reserved.