C#怎么判断进程是否在运行_C#如何管理系统进程【必备】

用Process.GetProcessesByName判断进程存在需注意:只匹配无后缀名、大小写建议小写、结果长度>0才存在;GetProcessById需捕获ArgumentException和InvalidOperationException;HasExited为false不保证进程正常响应,GUI进程应加Responding检查。怎么用 Process.GetProcessesByName 判断进程是否存在直接查进程名是最常用也最容易出错的方式。它不看路径、不看用户上下文,只匹配 process.processname(即去掉 .exe 后缀的名称),所以 notepad 能匹配 notepad.exe,但也会误匹配 notepad_plusplus.exe(如果名字含子串)。实操建议:始终用 Process.GetProcessesByName("chrome") 而不是 Process.GetProcessesByName("chrome.exe") ------ 后者会返回空数组检查结果长度:if (Process.GetProcessesByName("explorer").Length > 0),别用 != null,这个方法从不返回 null注意大小写:Windows 上通常不敏感,但某些容器或模拟环境可能敏感,建议统一用小写比对权限问题:跨用户进程(如系统服务启动的进程)在非管理员权限下可能查不到,Access denied 错误不会抛异常,而是直接不出现在结果里为什么 Process.GetProcessById 会抛 ArgumentException这不是"进程不存在"的信号,而是你传了个根本没用过的 PID,或者该 PID 曾经存在但已退出、被复用------Windows 的 PID 是可重用的,且重用前有短暂空窗期。常见错误现象:刚杀掉一个进程,立刻用它的 PID 去 GetProcessById,报 ArgumentException: The parameter is incorrect缓存了某个进程的 PID,几秒后去查,发现报错,其实进程早死了,PID 被新进程占用了正确做法是加 try-catch,并把 ArgumentException 和 InvalidOperationException(进程已退出)都视为"进程不可用":try { var p = Process.GetProcessById(pid); return !p.HasExited; // 注意:即使拿到对象,也要再 check HasExited} catch (ArgumentException) { return false;} catch (InvalidOperationException) { return false;}判断进程是否"真正运行中":不能只看 HasExited == falseHasExited 返回 false 只代表内核对象还在,不代表进程响应正常。比如 GUI 进程卡死、后台服务假死、或处于挂起状态,HasExited 依然为 false。使用场景决定你需要多深的探测: 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具

相关推荐
Thneonl2 小时前
Celery 生产踩坑:1000 任务积压与 acks_late 双重执行
后端·python
清桔2 小时前
模型的调用
python
IT枫斗者枫哥2 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
小小张说故事2 小时前
Python 多线程为什么跑不快?asyncio 入门指南:异步并发从零上手
后端·python
10年前端老司机2 小时前
干货分享|企业智能知识库 Rerank 重排序落地实践与踩坑总结
python·aigc·agent
Y002 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
天天被压力2 小时前
【Python 量化取数指南 #13】Python 把行情落库:sqlite 一键存,回测随用随取
java·人工智能·python
天天被压力2 小时前
【Python 量化取数指南 #14】Python 清洗行情数据:复权停牌对齐,回测不翻车
java·人工智能·python
Python私教2 小时前
Python环境配置:conda+PyCharm+换源,附6个坑
人工智能·python·pycharm
databook2 小时前
检测数据异常值的五种统计技术
python·数据挖掘·数据分析