纯代码方式杀死指定进程名的进程(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

相关内容

热门资讯

金价又崩了!5月这波下跌,藏着... 昨天看行情的时候,我一度以为自己眼花了。 5月18日亚市早盘,现货黄金伦敦金直接失守4500美元/盎...
拿下百年药企、进军医院市场,广... (本文作者为 牛刀财经NiuDaoCJ,钛媒体经授权发布) 文 | 牛刀财经NiuDaoCJ ...
一心卖车的蔚来,终于被看懂了 作者 | 定焦One 陈颐 中国资本市场对新能源汽车的态度,最近一年发生了转变。 具身智能、飞行汽...
原创 杨... 赚的不多,拿的不少。 作者 | 于婞 编辑丨高岩 来源 | 野马财经 与明星爱人黄圣依再见1年后,“...
历史首次!东莞A股上市公司,市... 据东莞市上市公司协会消息,截至2026年5月15日收盘,东莞64家A股上市公司总市值首次突破万亿元,...
对标行业龙头先导智能,格林晟港... 在锂电制造的中段——从极片到电芯成型的核心环节,有一项设备至关重要:叠片机,它直接决定了电池的能量密...
银行存款大局已定?明后年,存款... 银行存款的大局,已经从“怎么多赚点利息”,变成了“怎么少亏点、别踩坑”。 2025年以来,存款利率一...
巨佬们最新重仓股来了! 管理规模超10亿美金的全球投资大师最新业绩来了! (本文内容均为客观数据信息罗列,不构成任何投资建...
一文读懂Token经济学新模式 AI应用的商业化,正在从卖软件、卖会员,延伸到卖Token调用能力。这里的Token,是大模型处理信...
原创 欧... 近年来,欧洲的欧洲的处境一直难言轻松,尤其是到了今年,许多本可缓解的问题突然集中爆发,让现实的压力一...
合肥国资,把很多地方国资都给带... *此图由AI生成 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 长鑫科技更新了招股书,业绩...
A股新“股王”,提示风险 截至5月18日收盘,联讯仪器股价为1344.99元/股,总市值约1381亿元。 联讯仪器称,公司于2...
ETF复盘资讯|硬科技强者恒强... 5月18日,A股低开后冲高回落,三大指数盘中一度集体翻红,午后再度下行,为连续第3日调整。截至收盘,...
中东混乱推动比特币大涨20%,... 据日经中文网报道,资金正在流入代表性虚拟货币比特币。自美国开始攻击伊朗的2月底至今,比特币的涨幅达到...
央行上海总部:4月末境外机构持... 观点网讯:5月18日,人民银行上海总部发布《2026年4月份境外机构投资银行间债券市场简报》显示,截...
马斯克花 100 亿想清楚一件... 1. OpenAI 的两大宿敌 Anthropic 和马斯克,放下心中成见之后终于在月初结盟了。 ...
标普全球评级亚太区首席经济学家... “AI(人工智能)不仅是一个‘金融故事’,它已经是一个‘实体经济故事’。美国正在建设大量数据中心,每...
国家统计局:1—4月份国民经济... 今天上午,国务院新闻办召开新闻发布会,国家统计局新闻发言人表示,今年1—4月份,我国有效实施更加积极...
AI时代,全球光电子产业迎来“... AI时代,全球光电子产业迎来“光谷时刻” ——第二十一届“中国光谷”国际光电子博览会今日开幕 往...
“我真的撑不住了”,2000万... 5月14日、15日两天,知名搞笑博主“大连老湿王博文”,分别在微信公众号和小红书上发表长文,宣布断更...