实验231_创建进程.pptxVIP

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验231_创建进程

操作系统实验 创建进程 学会通过基本的Windows进程控制函数,由父进程创建子进程。 实验目的 我们设计一个应用程序时,有时候需要另外一段代码做一些其它工作。 方法如下: 一、函数调用或者子程序 弊端:我们可以用函数调用或者子程序,但是我们调用函数之后,只能等函数返回; 二、在进程内创建一个新线程 弊端:但是如果在一个复杂应用系统中,我们有可能不慎改写了进程地址空间中的某些数据(例如某些引用数据),导致其它工作不能正确地进行。 三、创建新进程(子进程) 所以当我们需要某些工作同时进行,并且希望保护它们的运行地址空间时,一个很好地办法是创建一个新进程来执行需要同时进行的工作。 假设现在有这样的一个工作,需要计算1——100的和,还需要做一个工作是读写文件。 我们可以让父进程计算,创建一个子进程实现读写文件。 主要工作: 1、首先由父进程创建子进程 2、让子进程创建一个文件并写入数据,子进程写文件过程中,父进程继续执行计算工作 3、等子进程执行完以后,父进程读取文件内容输出,实现进程协同工作。 实验内容 父进程框架 void main() { //为创建进程做准备工作 //创建子进程 If(创建失败) 返回 Else(创建成功) //执行计算1——100的和 //等子进程执行完,读取子进程的文件内容,并输出。 } 程序框架 子进程框架 void main() { //创建文件 If(失败) 返回 Else(成功) //向文件写入数据 //读取文件内容输出 } BOOL CreateProcess( LPCTSTR lpApplicationName , //指定可执行程序名 LPTSTR lpCommandLine , //命令行字符串,可以为NULL LPSECURITY_ATTRIBUTES lpProcessAttributes , //新进程对象的安全属性 LPSECURITY_ATTRIBUTES lpThreadAttributes , //新进程对应线程的安全属性 BOOL bInheritHandles ,//指定父进程的对象句柄是否能被子进程继承 DWORD dwCreationFlags , //指定创建进程的附加标记,即指定新创建进程的特性 LPVOID lpEnvironment ,//指定新进程使用的环境,NULL表示同父进程环境 LPCTSTR lpCurrentDirectory , //指定子进程当前路径,NULL表示与父进程路径相同 LPSTARTUPINFO lpStartupInfo , //指定新进程主窗口如何显示 LPPROCESS_INFORMATION lpProcessInformation //作为返回值使用,是一个指针 ); 父进程创建子进程 用CreateProcess函数来创建一个新进程 当调用CreateProcess时,系统所做的工作: 1、首先,系统创建一个进程内核对象,其初始使用计数为1。 (进程内核对象并不代表进程本身,而是操作系统用来管理这个进程的一个数据结构。) 2、然后,系统为新进程创建一个虚拟地址空间,并将可执行文件(和所有必要的DLL)的代码及数据加载到进程的地址空间。 3、最后,系统为新进程创建一个主线程内核对象(使用计数为1) (线程内核对象是操作系统用来管理线程的数据结构。) 系统做完这些工作以后,新进程的主线程就开始执行运行时的启动代码,在启动代码中会调用应用程序的main函数,这样,新进程就从main函数开始执行。 如果调用CreateProcess函数后,系统成功创建了新进程并且创建了其主线程,则系统返回TRUE,否则返回FALSE。 讨论CreateProcess的参数。 LPCTSTR lpApplicationName lpApplicationName参数指定新进程要使用的可执行文件的名称。可以是完整路径和文件名,也可以是部分名称。注意一定要加上扩展名“.exe”。在本次实验中,使用全路径和文件名。 CreateProcess(G:\\Projects\\操作系统编程实验\\创建进程\\Child\\Debug\\Child.exe,NULL,…) (该参数可以为NULL,这时文件名必须是参数lpCommandLine 指向的字符串中第一个空格界定的标记。) LPTSTR lpCommandLine lpCommandLine参数用来指定传递给新进程的命令行字符串。在本次实验中,不需要这个参数,可以设为NULL。 (在很多时候,我们将可执行文件名和命令行参数都传给lpCommandLine参数,CreateProcess函数分析lpCommandLine参数时,会把该字符串中第一个空格分隔的标记作为可执行文件名,如果是可执行文件

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档