您的位置:首页 > 其它

《深入浅出MFC》——一个进程的诞生与死亡

2011-08-12 12:27 162 查看
执行一个程序,必然就产生一个进程(process)。最直接的程序执行方式就是在shell(如Win95的文件总管或Windows3.x的文件管理员)中以鼠标双击某一个可之星文件图标(假设其为App.exe),执行起来的App进程其实是shell调用CreateProcess激活的。

让我们看看整个流程:
1.shell调用CreateProcess激活App.exe。

2.系统产生一个「进程核心对象」,计数值为1。

3.系统为此进程建立一个4GB地址空间。

4.加载器将必要代码加载到上述地址空间中,包括App.exe的程序、资料,以及所需的动态链接函数库(DLLs)。加载器如何知道要加载那些DLLs呢?它们被记录在可执行文件(PE文件格式)的.idata section中。

5.系统为此进程建立一个执行线程,称为主执行线程(primary thread)。执行线程才是CPU时间的分配对象。

6.系统调用C runtime函数库的Startup code。

7.Startup code调用App程序的WinMain函数。

8.App程序开始运作。

9.使用者关闭App主窗口,使WinMain中的消息循环结束掉,于是WinMain结束。

10.回到Startup code。

11.回到系统,系统调用ExitProcess结束进程。

可以说,透过这种方式执行起来的所有Windows程序,都是shell的子进程。本来,母进程与子进程之间可以有某些关系存在,但shell在调用CreateProcess时已经把母子之间的脐带关系剪断了,因此它们事实上是独立实例。

摘自《深入浅出MFC》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: