CreateProcess不会等待进程启动

CreateProcess不会等待进程启动

作者:BlogUpdater |  时间:2022-04-11 |  浏览:114 |  评论已关闭 条评论

众所周知,我们可以调用CreatProcess这个API来创建一个进程。这里我使用到了”创建”,而不是”启动”,也就是说,CreatProcess只是创建一个进程,而不是启动它。
CreateProcess在返回的之前,不会等待进程启动是否完成。它只是简单地创建一个进程对象,然后剩下的工作就不再由它负责了。

那么,是由谁来初始化这个进程呢?
你答对了,在Win32进程模型下,是进程在它的上下文中初始化它自己。

当一个进程被创建之初,它的内部结构几乎是空的,只保留有一些必要的信息用于进程的启动阶段。当进程中的线程被赋予CPU时间片之后,它就开始了真正的工作,例如加载DLL,按照正确的顺序对DLL进行初始化,然后调用应用程序的入口点(Program’s entry point)。

如果在进程的启动过程中,有某一个步骤出现了问题,则整个进程将会被终止,然后操作会设置一个错误代码来指示进程启动失败的原因。例如,如果进程启动阶段找不到一个必须的DLL,则错误代码就会是:STATUS_ENTRYPOINT_NOT_FOUND。

但是,另外一个情况也需要注意,就是你可以通过SetErrorMode来禁止错误对话框的出现。

总结
进程的概念对于操作系统来说,是一项伟大的发明。要始终记得,进程本身不会执行任何代码,它只是提供一个空间来存储一些必要的信息,而真正执行代码的是:线程。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《CreateProcess does not wait for the process to start》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

评论已关闭。