|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不会等待进程启动】
- ssd|电视音响,你不会选择回音壁Soundbar?为什么?
- Intel|12代酷睿处理器用久后顶盖变弯 Intel回应:不会引起大问题
- 电视机|买电视看个寂寞,80%的节目要VIP,未来电视机会不会被淘汰?
- 庞贝古城新晋「看门狗」:不会收集数据的巡逻安保员不是好 Spot
- 幕布|这8件小家电值得买!颜值又高又实用,买来基本不会闲置
- 富士|华为千元档产品会不会更有市场?千元买鸿蒙系统,还有5G网络哦
- swift|俄罗斯全面转用银联卡?网友:不会连累我们吧...
- 涨停|俄罗斯全面转用银联卡?网友:不会连累我们吧...
- 电池|电瓶修复—这种充电不会热吗?
- iPhone|华为的叠芯工艺成功了,会不会超过4nm制程工艺?