Qt强制杀死当前程序进程或指定进程
亲测有效
1. windows操作系统下【亲测有效】
windows操作系统下,Qt程序需要退出时或者某些时刻杀死当前进程或者指定PID进程时,可以采用windows下的cmd命令TASKKILL 指令,并采用Windows下API 接口函数:WinExec()函数
具体代码如下:
#include <windows.h>//winApi函数
#include <winbase.h>//winApi函数
#include <QCoreApplication>
void QtWinApi::KillProcess()
{
qint64 pid = QCoreApplication::applicationPid();//获取当前进程的PID
#ifdef WIN32//Windows系统
/**
* 强制杀死当前进程,同时推出所有子线程
* TASKKILL 参数解释:
* /T : 杀死当前进程启动和其启动的所有子线程
* /F: 强制杀死进程
* */
QString cmd = QString("TASKKILL /PID %1 /F").arg(pid);//Windows 系统下,杀死当前进程命令,不杀死其开启的子进程
// QString cmd = QString("TASKKILL /PID %1 /T /F").arg(pid);//Windows 系统下,杀死当前进程树,包括其开启的子进程
//@ 可以,无dos黑窗口
WinExec(cmd.toLocal8Bit().data(), SW_HIDE);//SW_HIDE:控制运行cmd时,不弹出cmd运行窗口
#endif
}
2. Linux操作系统下【未测试,理论上是可以的】
Linux操作系统下,Qt程序需要退出时或者某些时刻杀死当前进程或者指定PID进程时,可以采用Linux下的kill 指令,配合system() 函数
具体代码如下:
#include <QCoreApplication>
void QtWinApi::KillProcess()
{
qint64 pid = QCoreApplication::applicationPid();//获取当前进程的PID
QString cmd = QString("kill -9 %1").arg(pid);//Linux 系统下,强制杀死当前进程命令
system(cmd.toLocal8Bit().data());
}