Chapter04-进程终止


一个进程终止的四种方式:

  • 基线程(primary thread)的入口函数自动返回.例如通常的main函数返回。
      在基线程的入口函数退出时必须确保:

      • 所有的该线程创建的C++对象都调用了对应的析构函数。
      • 操作系统已经释放了所有申请的线程堆栈。
      • 系统在入口函数的返回值中甚至了退出代码值(exit code)
      • 系统将减少进程内核对象(process kernel object)的引用值(usage count)


  • 在进程的一个线程中调用ExitProcess函数。
            如果进程正常地从基线程(primary thread)的入口函数退出,则会自动清理和释放

  资源。但是如果直接调用ExitProcess函数则就是直接地粗暴地退出进程。

    #include <windows.h>
    #include <stdio.h>
    class CSomeObj 
    {
    	public:
    		CSomeObj() { printf("Constructor\r\n"); }
    		~CSomeObj() { printf("Destructor\r\n"); }
    };
    
    CSomeObj g_GlobalObj;
    
    void main () 
    {
    	CSomeObj LocalObj;
    	ExitProcess(0); 
    	
    	// This shouldn't be here
    	// At the end of this function, the compiler automatically added
    	// the code necessary to call LocalObj's destructor.
    	// ExitProcess prevents it from executing.
    }
    /*
    调用ExitProcess的输出结果:
    	Constructor
    	Constructor
    	
    不调用ExitProcess的输出结果:
    	Constructor
    	Constructor
    	Destructor
    	Destructor
    */
  • 在其他进程的线程中调用TerminateProcess函数。
BOOL TerminateProcess(HANDLE hProcess,UINT fuExitCode);
TerminateProcess函数和ExitProcess函数的一个主要的不同点就是:TerminateProcess
函数可以通过进程对应hProcess的句柄参数来终止任意进程,而ExitProcess函数只能终止
调用该函数的进程。
TerminateProcess函数函数是异步的,调用该函数只是通知系统该进程要退出,但并不能

保证进程就能马上退出。


  • 该进程中的所有线程都死掉了。


一个进程退出时,将会执行以下操作:

  • 进程中的所有线程都将终止。
  • 所有的用户对象和GDI都会被释放。都有的内核对象(Kernel Objects)都会被释放。
  • 函数的 exit code 从 STILL_ACTIVE 变成ExitProcess或TerminateProcess函数的返回值
  • 进程内核对象(process kernel object)的状态变成已触发状态。
  • 进程内核对象(process kernel object)的引用值减一。

PS:

当一个进程退出,就不存在“资源泄漏”得说法。因为进程退出时系统会清理所有的数据。
但是当一个资源不需要就应该用代码将其释放,不然就有点“占着茅坑不拉屎”……


原文链接: https://www.cnblogs.com/java20130722/archive/2012/04/08/3207223.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Chapter04-进程终止

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/46468

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午10:51
下一篇 2023年2月8日 下午10:51

相关推荐