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

执行一个程序,必然就产生一个进程(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》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值