为何含throw new Exception()的C#控制台程序终止前会生成同名子进程?
解答:未处理异常时出现的短暂同名子进程及任务管理器不可见原因
该子进程是什么?
这个短暂出现的子进程是Windows错误报告(WER)机制在处理.NET程序未处理异常时,临时启动的目标可执行文件实例。
当从文件资源管理器双击启动控制台程序,主进程触发未处理异常后,WER会启动一个同可执行文件的子进程,目的是加载程序元数据、收集进程状态信息,用于生成错误报告或执行异常调试逻辑——但这个子进程不会执行你的Main方法,仅完成信息收集后就立刻退出,生命周期非常短。
为何任务管理器无法显示它?
原因主要有两点:
- 生命周期极短:该子进程仅存在约1秒,而任务管理器的默认刷新间隔通常为1-2秒,它往往在任务管理器完成下一次刷新前就已经退出,因此无法被捕捉到。
- 工具检测机制差异:
pslist(带-s参数时持续刷新)是实时输出进程列表,你编写的Process.GetProcessesByName轮询程序是主动高频查询进程,所以能抓到这个短暂存在的进程;任务管理器的刷新机制相对滞后,且可能对极短生命周期的进程做了过滤优化。
内容的提问来源于stack exchange,提问作者Arek Dygas
相关产品推荐
相关产品推荐

