实验一、进程的创建和撤销
来源:互联网 发布:爬虫 股票数据 编辑:程序博客网 时间:2024/06/10 03:13
一.实验目的
(1) 加深对进程概念的理解和进程创建与撤消算法;
(2) 进一步认识并发执行的实质。
二.实验内容
(1)进程管理认识:通过windows “任务管理器”观察进程的状态,进行进程的创建、切换和撤销。
(2)进程创建与撤销:通过系统调用编程实现进程的创建与撤销功能,并在屏幕上观察进程活动的结果。
三.实验步骤
(1) 任务分析:
以下是创建进程的关键知识:
进程创建和撤销需要调用CreateProcess()和TerminateProcess()。CreateProcess()实际上是运行一个新的可执行程序,这里,需要设置其必备的参数。而终止进程则首先是要找到运行进程的句柄,然后终止该进程。
(2) 程序设计:
a.总体设计:
通过main()函数调用两个函数void startprocess()和函数void stop_process()。主要是在main()函数中用while循环和开关语句switch选择序号对其进行控制,可以先创建进程并观察然后在选择序号终止该进程。
b.具体实现: 首先我们必须知道函数CreateProcess()的参数定义(类型和名称),共10个参数,其函数原型为
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
其中第二个参数lpCommandLine参数允许调用者向新应用程序发送数据;STARTUPINFO所必需的,用于在必要时指明新应用程序的主窗口的外观. lpProcessInformation用于调用的结果块和发送新应用程序的进程和主线程的句柄和ID号。其他参数可以按缺省值为空。
判断创建进程是否成功,若不成功,输出创建不成功并返回;若成功则显示程序并获得句柄,以方便终止句柄。在终止进程过程中,若句柄不为空,调用TerminateProcess()进一步判断。
其函数原型
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode
);
(3) 程序结果:打印程序的输出结果(表明对应的数据)或主要界面图。
开始时的界面:(如图所示)
输入序号1后 产生的结果:
接着输入序号2后该进程被撤销后的结果:
输入序号3退出程序:
(4) 调试与测试:
如果进入主界面时,直接执行序号2终止进程:
上述结果表明 由于事先没有创建进程,所以句柄为空,无法终止进程。
四.实验总结
首先查看“任务管理器”进程的动态,并新建和关闭进程观察。接着是要创建进程和撤销进程,首要工作是我们得弄清楚两个系统函数CreateProcess()和TerminateProcess()入口参数的类型和函数,弄明白这些关键因素,然后就是如何将它们组织起来,我用的控制台下的switch语句来控制到底进行哪种操作。通过这次试验,我们加深了平时学习的理论知识和实践的联系,并加深了印象。不过,我觉得这次试验如果能够用MFC的消息触发更加直观,有些参数弄的还是不太明白,还需要多多努力。
五.附录源代码
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE m_hPro;
void startprocess()//创建进程
{
STARTUPINFO si;//必备的参数设置
int n=1;
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW;
si.wShowWindow=SW_SHOW;
PROCESS_INFORMATION pi;
if(!CreateProcess(NULL,"C://Program Files//Internet Explorer//iexplore.exe",NULL,NULL,false,0,NULL,NULL,&si,&pi))
{
cout <<"Create Process Fail!" <<endl;
exit(1);
}
else
{
cout <<"Create Process Success!" <<endl;
m_hPro=pi.hProcess;
}
}
void stop_process() { if(m_hPro) { if(!TerminateProcess(m_hPro,0)) { //终止出现错误,显示错误信息 LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); } else { cout<<"TerminateProcess sucess"<<endl; } m_hPro=NULL; } else { cout<<"null m_hPro"<<endl; } } int main() { while(1){ cout<<"请输入序号"<<endl; cout<<"1 创建进程 2 终止进程 3退出"<<endl; int i; cin>>i; switch(i) { case 1:startprocess();break; case 2:stop_process();break; case 3:exit(1); } } return(0); }
- 实验一、进程的创建和撤销
- 八、Linux系统编程-进程(一)进程概念、进程数据结构、进程状态变迁、进程创建和撤销
- 【Linux操作系统分析】进程——进程切换,进程的创建和撤销
- 操作系统实验一之进程的创建实验
- 进程管理之(一) 进程的创建实验
- 守护进程的概念和创建实验
- 操作系统算法 之 进程的创建与撤销
- 进程的创建(实验1)
- 进程的创建(实验1)
- 实验0 Linux用户界面的使用 实验一 进程的创建与并发执行
- 引起进程撤销的事件
- SQL——基本表的创建和撤销
- SQL——索引的创建和撤销
- 进程撤销
- 实验一:进程控制实验
- 一个小型的用于监视进程产生和撤销驱动逆向分析
- Linux进程的创建和进程树
- 进程描述和进程的创建
- 逐像素光照( ray trace ) (一)[反射光]
- 常见的面试case
- JavaScript window.opener的用法
- 关于cpu-z,everest,IntelCoreSeries的一些认识
- 库的学习
- 实验一、进程的创建和撤销
- 让旧版本Firefox扩展完美兼容新版浏览器的小技巧
- auto_ptr 解释
- MyEclipse 8.5 开发环境配置,汉化,Aptana2.0插件,SVN 插件,Flex Builder 3/4 插件安装
- oracle中函数和存储过程简单示例-动态sql
- Oracle在Linux操作系统下的安装小结
- 原来一天编写C语言太多真的会得C语言病的
- windows Message 说明
- mtk编译命令详解 及手机指令(转载)