1.基于线程ID杀死
获取相关线程的id,可以有以下两种方式:
(1)打开cmd窗口,然后输入tasklist,然后输入tasklist findstr | “相关线程的名称.exe”,然后就可以得到pid,将相关pid放入一下代码中中去,即可实现。
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
int main() {
DWORD processId = 33924; //相关id
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, processId);
if (hProcess == NULL) {
std::cerr << "无法打开进程。" << std::endl;
return 1;
}
BOOL result = TerminateProcess(hProcess, 0);
if (result == 0) {
std::cerr << "无法终止进程。" << std::endl;
return 1;
}
std::cout << "进程已终止。" << std::endl;
CloseHandle(hProcess);
return 0;
}
(2)打开任务管理器,在相关进程后面右键然后点击详细信息,也可以得到相关的id
2.基于线程名称杀死相关进程,步骤也简单,相关代码如下。
#include <Windows.h>
#include <TlHelp32.h>
void KillProcess(const char* szImageName) {
PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL bRet = Process32First(hProcess, &pe);
while (bRet) {//遍历线程,如果得到的线程和目标线程一样,则杀死线程
if (lstrcmp(szImageName, pe.szExeFile) == 0) {
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID), 0);
}
bRet = Process32Next(hProcess, &pe);//继续下一个线程
}
return;
}
int main() {
KillProcess("DirectoryMonitorTool.exe");
}