当前位置:C++技术网 > 资讯 > 关闭进程句柄与进程终止的误解

关闭进程句柄与进程终止的误解

更新时间:2015-06-24 00:19:05浏览次数:1+次

    操作系统是通过进程句柄来管理进程的。因此,曾经就认为,关闭了进程句柄后,进程就会终止。但是有一次在实现程序运行时将自己的程序文件删除并终止自己的时候,在网上查了资料,发现在创建一个新进程后,同时将新进程的句柄关闭了。不过,通过努力,功能实现了。但是一直都不解,怎么进程句柄关闭后进程怎么没有终止呢?你是不是也这样认为过或者现在正在疑惑呢?
    后来通过查阅大量的资料,不断的学习,不断的突破了我自身的局限认识,发现原来我了解的是多么的肤浅。以至于有各种各样的误解,我想,正在阅读的你,可能也还有着误解。下面来澄清这个误解。
    进程在系统来看,就是一个内核资源,凡是系统的资源,都会通过一个句柄来管理。在进程被系统启动或者被其他进程启动,系统或者其他进程就通过句柄来管理它。通过进程句柄,可以挂起进程,可以恢复进程执行,还可以终止进程等。终止进程可以通过TerminateProcess函数来实现。所需要的就是进程句柄。
    如果你不需要管理你的子进程了,就不需要维系和子进程的关系,就可以把子进程的句柄关闭。调用CloseHandle函数就可以了。关闭后,你只是断绝了和子进程的关系,并不能把子进程怎么样。断开后,你就不再拥有子进程的句柄,曾经拥有的句柄变为无效,就不能再对子进程操作了。当然,你可以通过其他的方式再次获得子进程的句柄,这是另外一回事。曾经误解,以为关闭了子进程的句柄,子进程就终止了。回头来看,如果这样就终止了,那何必需要使用TerminateProcess函数来终止呢?子进程是一个独立的进程,父进程也是一个进程,都是一个一个的执行体。父进程拥有子进程的句柄,就可以管理子进程,但是当你失去了子进程的句柄,只是失去了管理子进程的东西而已。子进程还是好好的。
    子进程要终止,除了其他进程调用TerminateProcess强行终止它,就是自己终止。要它死也不是那么容易的事情。
    在此,并没有高深的知识,只是在理清一个误区。话不在多,但是你必须纠正这个误区,不然今后会出现很多困惑的。