还剩4页未读,继续阅读
文本内容:
操作系统实验报告实验二进程创建与撤消
一、实验目的
1.通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解进程生存过程.Windows
20002.通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法.
二、实验内容
1.创建进程CreateProcessO调用的核心参数是可执行文件运行时的文件名及其命令行.下表详细地列出了每个参数的类型和名称.参数名称使用口的LPCTSTR1pApp1ivationName全部或部分地指明包括可执行代码的EXE文件的文件名LPCTSTR IpCommandLine向可执行文件发送的参数LPSECURIITY_ATTRIBUTES返回进程句柄的安全属性.主要指明这一句柄是否应IpProcessAttributes该由其他子进程所继承LPSECURIITY_ATTRIBUTES返回进程的主线程的句柄的安全属性IpThreadAttributes一种标志,告诉系统允许新进程继承创建者进程的句柄BOOL bInheritHandleDWORDdwCreat ionF1age特殊的创建标志如CREATE_SUSPENDED的位标记向新进程发送的一套环境变量;如为null值则发送调用LPVOID IpEnvironment者环境LPCTSTR新进程的启动目录IpCurrentDirectorySTARTUPINFO STARTUPINFO结构,包括新进程的输入和输出配置的详IpStartupInfo情LPPROCESS_INFORMATION调用的结果块;发送新应用程序的进程和主线程的句柄IpProcessInformation和ID可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;参数允许调用者向新应用程序发送数据;接下IpCommandLine来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关.然后是标志参数,用以在参数中指明系统应该给予新进程什么行为,经常dwCreationFlags使用的标志是告诉主线程立刻暂停.当准备好时,应该使用CREATE_SUSPNDED,来启动进程.另一个常用的标志是告诉新进程ResumeThread APTCREATE_NEW_CONSOLE,启动自己的控制台窗口,而不是利用父窗口.这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少时间.CPU接着是函数调用所需要的三个通常使用缺省值的参数.第一个参数是CreateProcessO参数,指明为新进程提供的环境;第二个参数是可用于向主IpEnvironment IpCurrentDirectory,创进程发送与缺省目录不同的新进程使用的特殊的当前目录;第三个参数是数STARTUPINFO据结构所必需的,用于在必要时指明新应用程序的主窗口的外观.的最后一个参数是用于新进程对象及其主线程的句柄和的返回值缓冲区.CreateProcessO ID以结构中返回的句柄调用函数是重要的,因为如PROCESSJNFORMATION CloseHandleAPI果不将这些句柄关闭的话,有可能危及主创进程终止之前的任何未释放的资源.
2.终止进程所有进程都是以调用ExitProcess或者TerminateProcess函数结束的,但最好使用前者而不要使用后者,因为进程是在完成了它的所有的关闭“职责”之后以正常的终止方式来调用前者的.而外部进程通常调用后者即突然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为.函数只要打开带有访问权的进程对象,就TerminateProcess APIPROCESS_TERMINATE可以终止进程,并向系统返回指定的代码,这是一种“野蛮”的终止进程的方式,但是有时却是需要的.如果开发人员确实有机会来设计“谋杀”(终止别的进程的进程)和“受害”进程(被终止的进程)时,应该创建一个进程间通讯的内核对象一一如一个互斥程序一一这样一来「受害”进程只在等待或周期性地测试它是否应该终止.
三、实验步骤运行见面如下成功的打开一个记事本文件:进程创建成功进程终止成功CntrlOtherPrcss2£1确J
四、实验总结通过本次实验进一步熟悉了操作系统的进程概念,基本上理解了Windows2000进程生存过程对进程的创建函数CreateProcess和终止函数TerminateProcess有了一定的了解,但是还存在着一些不太懂的问题,课下的学习要加强
五、程序清单void CCntrlOtherPrcssDlg::OnStartPROCESSJNFORMATION pi;STARTUPINFO si;〃初始化变量memsetsi,0,sizeofsi;si.cb=sizeofsi;si.wShowWindow=SW_SHOW;si.dwFlags=STARTF_USESHOWWINDOW;〃打开记事本程序BOOL fRet=CreateProcessNULL,nc:\\windows\\notepad.exe cautoexec.bat”,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,NULL,NULL,;si,piif!fRet{〃创建失败,显示错误信息LPVOID IpMsgBuf;FormatMessageFORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError,MAKELANGIDLANG_NEUTRAL,SUBLANG_DEFAULT,//Default languageLPTSTRlpMsgBuf,0,NULL;;AfxMessageBox LPCTSTRlpMsgBufLocalFree IpMsgBuf;else{AfxMessageBoxnCreateProcess成功m_hPro=pi.hProcess;void CCntrlOtherPrcssDlg::OnStop〃判断进程句柄是否合法ifm_hPro〃根据句柄,终止刚才打开的记事本程序if!TerminateProcessm_hPro,0〃终止出现错误,显示错误信息LPVOID IpMsgBuf;FormatMessageFORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError,MAKELANGIDLANG_NEUTRAL,SUBLANG_DEFAULT,//Default languageLPTSTRlpMsgBuf,0,NULL;AfxMessageBox LPCTSTRlpMsgBuf;LocalFree IpMsgBuf;elseAfxMessageBoxHTerminateProcess成功m_hPro=NULL;elseAfxMessageBoxnm_hPro为空。
个人认证
优秀文档
获得点赞 0