首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220411A01OGK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券