利用CMD命令行杀进程方法(已知该进程的PID号,可以直接杀该进程)(QProcess、taskkill)
程序员文章站
2022-05-28 11:10:53
...
博主做工程时,利用Qt的主线程开启了一条支线程,然后用该支线程以阻塞的方式开启了一条进程。这条进程执行的时间很久,博主想要在执行到一半的时候,强行终止该进程。经过一天的资料查找,博主终于找打了一个简易可行的杀进程方法,下面详细的方法介绍如下。
1.1博主利用Qt的QProcess在支线程里面开启了一条进程,并且获取了该进程的PID号。代码如****意:在Qt下进程的PID是quint64 QProcess::processID()的返回值,不是Q_PID QProcess::PID()的返回值)
qDebug()<<tr("第一种方式:开启一个进程!");
/*QProcess第一种开启方法:启动时,在程序后面附带参数*/
process = new QProcess(this);
process->setObjectName("processObject");
qDebug()<<process->objectName();
qDebug()<<"线程里面"<<QThread::currentThreadId();
process->start("cmd");
process->waitForStarted();
qDebug()<<"process->processId()=="<<process->processId();
qDebug()<<"process->pid()=="<<process->pid();
process->waitForFinished(60000);
qDebug()<<"支线程执行完毕";
1.2博主想要在该进程执行到一半的时候,强行终止这个进程,可以直接在cmd调用下面这条命令,可以直接杀死该进程。(注意:13368是要杀进程的PID号)
taskkill /f /pid 13368
Qt代码杀进程如下所示:
if(processID.toInt())
{
QProcess process(0);
process.start("cmd"); //启动一个cmd线程
process.waitForStarted(); //等待启动进程完成,超时30s则接触阻塞
process.write(tr("taskkill /f /pid %1\n").arg(processID).toLatin1());
process.closeWriteChannel();
process.waitForFinished(); //等待启动进程完成,超时30s则接触阻塞
qDebug()<<"p.readAllStandardOutput()=="<<QString::fromLocal8Bit(process.readAllStandardOutput());
}
参考内容:
https://blog.csdn.net/rznice/article/details/54345786(参考:cmd的taskkill杀进程)