windows 进程退出函数小结

博客探讨了在Windows环境中,进程A通过createToolhelp32Snapshot检测进程B的退出情况,遇到进程B异常闪退的问题。研究发现,进程B的退出状态(exit status)在不同条件下有不同的值。GetExitCodeProcess用于获取进程退出码,它可能来源于ExitProcess、TerminateProcess的参数,main或winmain的返回值,或异常值。文章详细对比了ExitProcess和TerminateProcess的区别,包括DLL处理、线程处理和IO操作的影响,并提供了MSDN的相关链接作为参考。
摘要由CSDN通过智能技术生成


最近现网有一个问题:我们的进程A起了一个定时器去检测另外一个进程B,当检测到进程B退出时,我们进程A也退出。

检测的机制是使用createToolhelp32Snapshot去获取当前进程快照,然后比较每一个进程名称是否与进程B的名称相同,如果找到相同的就返回进程ID,否则返回0.

问题是:起了我们的进程A,进程B就会经常性的闪退,很不可思议。使用processmonitor 检测进程B退出状态(exit status),发现进程B被杀时,exit status 为1;起了进程A时,B退出时的exit status 为0,由于不了解exit status含义,今晚特地拜读MSDN,结果如下:

1.在知道了进程的句柄时,可以通过GetExitCodeProcess来获取进程的退出码,有以下几个来源

a.ExitProcess 和 TerminateProcess 调用时的参数

b.main或者winmain函数的返回值(当函数从main函数返回时也会隐式的调用ExitProcess)

c.导致进程关闭的某个异常值(the value of the exception that caused the termination


注意:

1.当某个线程在等待一个内核对象时,除非等到这个内核对象,否则不会响应被中断的请求

2.当一个进程被ExitProcess终止时,该进程所 加载的所有dll都会受到DLL_PROCESS_DETACH消息,而使用TerminateProcess 结束进程时不会通知其加载的dll

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值