纯代码方式杀死指定进程名的进程(LinuxWindows)
admin
2024-03-04 00:58:49
0

纯代码方式杀死指定进程名的进程(Linux&Windows)

1、命令行方式

1.1、Linux

> pidof sftp-server | xargs kill -9

1.2、Windows

> taskkill /im softwareName.exe /f

1.3、合入代码中,linux可以使用system,windows可以使用system、winexec等方式执行

#ifdef __linux__
system("pidof softwareName | xargs kill -9");
#elif _WIN32
system("taskkill /im softwareName /f"); //会弹出黑框一闪而过
//不弹出黑框,但是若执行完WinExec立即shellexecute或createprocess执行刚刚kill的软件会出现软件被杀的情况。
// 详情请见:https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winexec
WinExec("taskkill /im softwareName /f",SW_HIDE);
#endif

2、纯代码方式

Windows下的方案:

  1. 使用CreateToolhelp32Snapshot获取当前系统中所有进程的快照

  2. 使用Process32Next循环遍历每一个进程信息

  3. 比较进程名若相符,使用OpenProcess根据进程信息中的pid打开进程句柄

  4. 使用TerminateProcess终止进程

Linux下的方案:

  1. 手写pidof通过进程名获取pid列表

    1. 打开/proc文件夹

    2. 遍历/proc文件夹下的文件,若为数字继续执行

    3. 使用readlink读取pid文件夹下的exe获取进程名

    4. 判断进程名是否与指定的进程名一致,若一致则将该pid放入到vector中

  2. 使用kill API杀死pid

代码如下

#ifdef __linux__
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include int pidof(const std::string& procName,std::vector& pids)
{DIR *dir = nullptr;struct dirent *dEnt = nullptr;int pid = 0, i = 0;char *s = nullptr;int pnlen = 0;dir = opendir("/proc");if(!dir){return -1;}pnlen = procName.size();while((dEnt = readdir(dir)) != nullptr){char exe[PATH_MAX + 1] = {0};char path[PATH_MAX + 1] = {0};int len = 0;if((pid = atoi(dEnt->d_name)) == 0)continue;snprintf(exe,sizeof(exe),"/proc/%s/exe",dEnt->d_name);if((len = readlink(exe,path,PATH_MAX)) < 0){continue;}path[len] = '\0';s = strrchr(path,'/');if(s == nullptr) continue;s++;if(!strncmp(procName.c_str(),s,pnlen)){if(s[pnlen] == ' ' || s[pnlen] == '\0'){pids.push_back(pid);}}}closedir(dir);return 0;
}BOOL KillProcessFromName(const std::string& strProcessName)
{std::vector pids;pidof(strProcessName,pids);for(auto &pid:pids){kill(pid,SIGKILL);}
}
#elif _WIN32
#include "tlhelp32.h"
BOOL KillProcessFromName(const std::wstring& strProcessName)
{//创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照) HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//PROCESSENTRY32进程快照的结构体 PROCESSENTRY32 pe;//实例化后使用Process32First获取第一个快照的进程前必做的初始化操作 pe.dwSize = sizeof(PROCESSENTRY32);//下面的IF效果同: //if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄 if (!Process32First(hSnapShot, &pe)){return FALSE;}//如果句柄有效 则一直获取下一个句柄循环下去 while (Process32Next(hSnapShot, &pe)){//pe.szExeFile获取当前进程的可执行文件名称 wstring scTmp = pe.szExeFile;if (scTmp == strProcessName){//从快照进程中获取该进程的PID(即任务管理器中的PID) DWORD dwProcessID = pe.th32ProcessID;HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);::TerminateProcess(hProcess, 0);CloseHandle(hProcess);return TRUE;}}return FALSE;
}
#endif

相关内容

热门资讯

利率变化对黄金行情影响如何分析... 利率作为经济领域的关键变量,其变化对金融市场的各个方面都有着深远影响,其中黄金市场也不例外。分析利率...
独家|原材料价格攀升,盛弘股份... 图源:视觉中国 蓝鲸新闻7月11日讯(记者 翟智超)一家横跨新能源与AI基础设施的龙头企业官宣全面提...
马斯克承认对手更强!但仍要求员... 快科技7月11日消息,据报道,特斯拉CEO埃隆·马斯克在一份备忘录中表示,鉴于Grok 4.5的To...
美亿万富豪:美国被掏空了,苹果... 据《财富》杂志网站7月8日报道,美国防务科技企业安杜里尔公司(Anduril)创始人、亿万富豪帕尔默...
泡泡玛特跌跌不休,段永平继续补... 在举牌泡泡玛特之后,段永平还在持续买入。 港交所最新数据显示,段永平再度增持泡泡玛特,持股数量由91...
基金合同为何重要运作机制更关键... 在基金投资领域,基金合同和运作机制是两个极其重要的元素,它们在基金的整个生命周期中扮演着关键角色。 ...
原创 外... 长征十号乙的一级箭体 7月10日中午,长征十号乙从海南商业航天发射场升空。火箭将卫星送入预定轨道后,...
期货交易中如何判断主力合约即将... 在期货交易里,准确把握主力合约换月时机对投资者至关重要,它直接影响到交易策略的制定与执行。以下是一些...
陈杰George Chan,安... 问AI· 陈杰的审计背景将如何影响IPO审核流程? 香港交易所全资附属公司香港联合交易所有限公司 ...
三环集团在香港联合交易所主板上... 转自:潮州发布 7月9日,三环集团在香港联合交易所主板成功上市,股票代码6951,成为潮州首家"A...
百亿资金持续加仓!段永平:泡泡... 继续买买买!段永平对泡泡玛特的持续加仓,再次引发市场关注。 7月10日,港交所最新权益披露信息显示,...
蚌埠港上半年集装箱吞吐量突破8... 初夏时节,蚌埠港新港作业区码头一片繁忙,岸桥有序起落,满载货物的集装箱船舶往来穿梭。2026年上半年...
AI“小登股”集体洗牌,是泡沫... 科技板块从“无差别抱团”走向分化,业绩能否超预期将成为关键分水岭。 超七成“小登股”回撤20%以上 ...
夏季达沃斯:万亿AI投资后的世... 今年夏季达沃斯,AI成为当之无愧的焦点。十余场分论坛讨论AI议题,三十余场涉及AI在制造、能源、医疗...
风险等级如何影响申赎安排更合理... 在基金投资中,风险等级是一个关键的考量因素,它对申购赎回安排有着重要的影响,合理的安排能够帮助投资者...
马斯克再出狂言:目标让Spac... 7 月 11 日消息,SpaceX CEO 埃隆 · 马斯克多年来一直靠向投资者描绘科幻式未来,为自...
一边抱紧AI、一边提防伊朗惊雷... 智通财经获悉,本周,华尔街走出了极度割裂的极端行情。伊朗局势传出新动向,一度引发原油、美债收益率和外...
原创 千... 原创首发 | 金角财经(ID: F-Jinjiao) 作者 | 周松 一年新增14000多家门店后...
西安银行[600928]日常公... 本版导读 2026-07-11 2026-07-11 2026-07-11 2026...
菏泽正规的优化网站制作哪家好 引言 在当今数字化时代,拥有一个高质量的网站对于企业和个人都至关重要。菏泽作为一个快速发展的城市,网...