您的位置:首页 > 其它

一个进程的诞生与死亡

2013-04-11 17:46 176 查看
执行一个程序,必然就产生一个进程(process)。最直接的程序执行方式就是在shell (如

Win95 的文件总管或Windows 3.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 结束进程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: