终止进程

进程终止的原因可能有:
1.主线程的入口函数返回
2.进程中的一个线程调用了ExitProcess函数
3.此进程中的所有线程都结束了
4.其他进程中的线程调用了TerminateProcess函数
当用户的程序入口函数返回时,启动函数会调用C/C++运行期退出函数exit,并将用户的返回值传递给它。exit函数会销毁所有全局的或静态的C++对象,然后调用系统函数ExitProcess促使操作系统终止应用程序。
void ExitProcess(UINT uExitCode);  //uExitCode为程序的退出代码(表明程序是否正常退出)
但C/C++应用程序应当避免直接调出这个函数,因为这会使C/C++运行期库得不到通知,而没有机会去调用全局的或静态的C++对象的析构函数。

ExitProcess函数只能结束当前进程,需要结束其他进程时,可以使用TerminateProcess函数:
BOOL TerminateProcess(
HANDLE hProcess,  //要结束的进程的句柄
UINT uExitCode       //指定进程的退出代码,可使用GetExitCodeProcess函数获取退出代码,如果调用此函数时目标进程还未结束,此函数会返回STILL_ALIVE。
);
对一个进程操作前,必须先取得该进程的句柄。CreateProcess函数创建进程后会返回一个进程句柄,而对于已存在的进程,只能使用OpenProcess函数来获取进程的访问权限。OpenProcess函数执行失败后将返回NULL,可用GetLastError函数取得调用线程的最后出错代码

一旦进程终止,就会有下列事件发生:
1.所有被这个进程创建或打开的对象句柄就会关闭
2.此进程内的所有线程将终止执行
3.进程内核对象变成受信状态(接受信号?),所有等待在此对象上的线程开始运行。
4.系统将进程对象中退出代码的值由STILL_ALIVE改成指定的退出码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值