用createprocess函数创建进程的意义是什么?

一个简单程序并没有用createprocess函数创建进程,为什么运行后也有进程?那既然不用函数创建进程也能有进程,用createprocess函数创建进程的意义是什么?... 一个简单程序并没有用createprocess函数创建进程,为什么运行后也有进程?那既然不用函数创建进程也能有进程,用createprocess函数创建进程的意义是什么? 展开
 我来答
yinbei111
2009-12-29 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:141万
展开全部
是windows调用的createprocess函数,并不是没有用createprocess函数。
《windows程序设计》摘抄:
操作系统事实上并不是真的调用main函数,而是去调用C/C++运行期启动函数,此函数初始化C/C++运行期库。因此,在应用程序中可以调用malloc和free之类的函数。它也会保证在用户的代码执行之前所有的全局的或静态的C++对象能够被正确的创建,即执行这些对象构造函数中的代码。
组成Win32进程的两个部分:

(1)进程内核对象。操作系统使用此内核对象来管理进程,也是操作系统存放进程统计信息的地方。

(2)私有的虚拟地址空间。此地址空间包含了所有可执行的或者是DLL模块的代码和数据,它也是程序动态申请内存的地方,比如说线程堆栈和进程堆。

在控制台应用程序中,C/C++运行期启动函数会调用程序入口函数main,所以如果程序中没有main函数的实现代码的话,连接器将返回“unresolved external symbol”错误。Win32应用程序的启动过程就是进程的创建过程,操作系统是通过调用CreateProcess函数来创建新的进程的。当一个线程调用CreateProcess函数的时候,系统会创建一个进程内核对象,其使用计数初始化为1.此进程内核对象不是进程本身,仅仅是一个系统用来管理这个进程的一个小的数据结构(PCB,Process Control Block)。系统然后会为新的进程创建一个虚拟地址空间,加载应用程序运行时所需的代码和数据。

系统接着会为新进程创建一个主线程,这个主线程通过执行C/C++运行期启动代码开始运行,C/C++运行期启动代码又会调用main函数。如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数返回TRUE,否则返回FALSE。
yx陈子昂
高粉答主

2015-08-27 · 每个回答都超有意思的
知道大有可为答主
回答量:3.2万
采纳率:75%
帮助的人:3859万
展开全部
CreateProcess函数作为win32的一个API用来运行一个新程序。
老的接口WinExec和LoadModule函数依旧可用,但是它们同样通过调用CreateProcess函数实现。

另外CreateProcess函数除了创建一个进程,还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建,堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。

新进程和新线程的句柄被以全局访问权限创建。对于这两个句柄中的任一个,如果没有安全描述符,那么这个句柄就可以在任何需要句柄类型作为参数的函数中被使用。当提供安全描述符时,在接下来的时候当句柄被使用时,总是会先进行访问权限的检查,如果访问权限检查拒绝访问,请求的进程将不能使用这个句柄访问这个进程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式