windows环境下根据进程名杀死进程 并重新拉起

2021/7/16 7:05:51

本文主要是介绍windows环境下根据进程名杀死进程 并重新拉起,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

#include <Tlhelp32.h>     #include <windows.h>     #include <tlhelp32.h>     #include "psapi.h" #include <Tlhelp32.h> void terminateMYSQL() {     HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);              //现在我们获得了所有进程的信息。        //将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中        //这个结构代表了一个进程,是ToolHelp32 API的一部分。        //抽取数据靠Process32First()和Process32Next()这两个函数。        //这里我们仅用Process32Next(),他的原形是:        //BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);        //我们程序的代码中加入:        PROCESSENTRY32* processInfo=new PROCESSENTRY32;        // 必须设置PROCESSENTRY32的dwSize成员的值 ;        processInfo->dwSize=sizeof(PROCESSENTRY32);        int index=0;        //这里我们将快照句柄和PROCESSENTRY32结构传给Process32Next()。        //执行之后,PROCESSENTRY32 结构将获得进程的信息。我们循环遍历,直到函数返回FALSE。        //printf("****************开始列举进程****************/n");        int ID = 0;        while(Process32Next(hSnapShot,processInfo)!=FALSE)        {            index++;            //printf("****************** %d ******************/n",index);            //printf("PID       Name      Current Threads/n");            //printf("%-15d%-25s%-4d/n",processInfo->th32ProcessID,processInfo->szExeFile,processInfo->cntThreads);            int size=WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,NULL,0,NULL,NULL);            char *ch=new char[size+1];            if(WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,ch,size,NULL,NULL))            {                if(strstr(ch,"mysqld.exe"))//使用这段代码的时候只需要改变".exe".将其改成你要结束的进程名就可以了。              {                     ID = processInfo->th32ProcessID;                    // qDebug()<<"ID ="<<ID;                     HANDLE hProcess;                     // 现在我们用函数 TerminateProcess()终止进程:                     // 这里我们用PROCESS_ALL_ACCESS                     hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ID);                     //if(hProcess==NULL)                     //{                       //  printf("Unable to get handle of process: ");                       //  printf("Error is: %d",GetLastError());                     //}                     TerminateProcess(hProcess,0);                     CloseHandle(hProcess);                }            }        }        CloseHandle(hSnapShot);        delete processInfo; }     QString Exe_Path = cfg.getSet()->value("EXE_PATH").toString(); QProcess *process =new QProcess(this); process->start(Exe_Path); if(!process->waitForStarted()) { return; }; QString strResult = QString::fromLocal8Bit(process->readAllStandardOutput());

这篇关于windows环境下根据进程名杀死进程 并重新拉起的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程