|CreateProcess不会等待进程启动

|CreateProcess不会等待进程启动

众所周知 , 我们可以调用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》
【|CreateProcess不会等待进程启动】