操作系统原理实验报告——进程控制与描述
一、实验目的
利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。
二、实验内容
1、进程的创建和终止。编写一段程序,可以创建一个进程,并终止当前创建的进程。试观察记录程序执行的结果,并分析原因。
2、利用VC++6.0实现上述程序设计和调试操作,对于进程创建的成功与否、终止进程操作的成功与否提供一定的提示框。
3、通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
三、实验步骤和思路
1、创建进程
使用Windows提供的 CreateProcess() API函数来创建一个新的进程和它的主线程,通过这个新进程运行指定的可执行文件。
CreateProcess()函数原型:
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
);
在创建进程之前,需要对各参数赋值并初始化,其中最核心的参数如下:
1、可执行文件运行时的文件名及其命令行
在本实验中,我为lpCommandLine赋的值是steam.exe,目的是打开steam。
2、用于指定新进程的主窗口特性的STARTUPINFO
定义一个STARTUPINFO结构的si,并通过.cb对si进行初始化赋值。
3、用于返回有关新进程及其主线程的信息的结构PROCESS_INFORMATION
定义一个PROCESS_INFORMATION结构的pi。
2、终止进程
终止进程主要有以下两个步骤
1、获取已创建进程的进程句柄hProcess。
2、用TerminateProcess来终止指定进程及其所有的线程,其函数原型如下
BOOL TerminateProcess(
HANDLE hProcess,//进程句柄
UINT uExitCode //进程终止码
);
四、实验截图
1、创建一个进程
2、终止一个进程
五、实验中的问题
1、实验中最大的问题是对于语言的不熟悉,比如Createprocess 函数和 TerminateProcess 函数中的参数,很多参数依旧不知道作用,最终在CSDN的帮助下勉勉强强完成了该试验。
六、实验代码
#include <cstdio>
#include <windows.h>
#include <iostream>
using namespace std; BOOL KillProcess(HANDLE hProcess);int main()
{STARTUPINFO si;PROCESS_INFORMATION pi;/* allocate memory */ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));/* create child process */if (!CreateProcess(TEXT("C:\\Program Files (x86)\\Steam\\Steam.exe"), /* use command line */NULL, /* command */ NULL, /* don£¬t inherit process handle */NULL, /* don^ inherit thread handle */FALSE, /* disable handle inheritance */0, /* no creation flags */NULL, /* use parentJs environment block */NULL, /* use parent1s existing directory */&si,&pi)){cout<<"½ø³Ì´´½¨Ê§°Ü :("<<endl<<endl;return -1;}cout<<"½ø³Ì´´½¨³É¹¦ :)"<<endl<<endl;cout<<"ÇëÊäÈëÊý×ÖÑ¡ÔñÑ¡Ï"<<endl<<"1.3Ãëºó¹Ø±Õ½ø³Ì"<<endl<<"2.È¡Ïû"<<endl;int n;cin>>n;if(n == 1){cout<<"½ø³Ì½«ÔÚ3ÃëºóÖÕÖ¹.. :)"<<endl<<endl;Sleep(3000);KillProcess(pi.hProcess);/* parent will wait for the child to complete */WaitForSingleObject(pi.hProcess, INFINITE);printf("½ø³ÌÒÑ˳ÀûÖÕÖ¹ :)");/* close handles */CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}
}BOOL KillProcess(HANDLE hProcess)
{if(hProcess==NULL)return FALSE;if(!TerminateProcess(hProcess,0))return FALSE;return TRUE;
}
操作系统原理实验报告——进程控制与描述相关推荐
- ZUCC_操作系统原理实验_Lab9进程的通信消息队列
lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...
- 《操作系统》实验报告——进程管理
理论知识 Linux--进程管理 1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程争用资源的现象,学习解决进程互斥的方法. 2.实验预 ...
- 《操作系统》实验报告——熟悉Linux基础命令及进程管理
理论知识 Linux--进程管理 Linux--Linux C语言编程基础知识 手把手教你安装Linux虚拟机 一.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执 ...
- ZUCC_操作系统原理实验_实验九 消息队列
操作系统原理实验报告 课程名称 操作系统原理实验 实验项目名称 实验九 消息队列 实验目的 了解 Linux 系统的进程间通信机构 (IPC): 理解Linux 关于消息队列的概念: 掌握 Linux ...
- 操作系统原理实验-进程同步
操作系统原理实验报告 实验题目 实验二进程同步 实验二.进程同步 1.1 实验目的 现代操作系统的核心是多道程序设计.多处理器和分布式处理器,这些方案和操作系统设计技术的基础都是并发.当多个进程并发执 ...
- 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc
操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...
- 8255交通灯实验的微型计算机,微机原理实验四实验报告8255控制交通灯实验
<微机原理实验四实验报告8255控制交通灯实验>由会员分享,可在线阅读,更多相关<微机原理实验四实验报告8255控制交通灯实验(4页珍藏版)>请在人人文库网上搜索. 1.实验四 ...
- 东北大学软件学院操作系统v实验报告
课程编号:B080000070 <操作系统>实验报告 姓名 学号 班级 指导教师 实验名称 <操作系统>实验 开设学期 2016 ...
- linux 实验2 进程创建,实验2Linux进程控制与通信
实验2Linux进程控制与通信 实验 2 Linux 进程控制与通信1. 实验目的(1 ) 进一步认识并发执行的概念,认识父子进程及进程创建原理:(2 ) 了解 Linux 系统中进程通信的基本原理. ...
- 配置微型计算机实验报告,微型计算机原理实验报告.docx
微型计算机原理实验报告 微型计算机原理实验报告专业班级: 通信工程2013级 学生姓名: 周博文 学 号: 2013221105200097 完成时间: 2015月12月 实验一 运行并分析Hello ...
最新文章
- C语言指出下列程序的错误,2012年计算机二级C语言精编教程第二章(8)
- App 上传遇到问题
- 软件测试mysql基础面试题_测试面试题合集之数据库
- 饼图的引导线怎么加_第0004期,复工了,这个Excel渠道分析(矩阵)图送给大家...
- 《Head First设计模式》第八章笔记-模板方法模式
- python面向对象类_python面向对象-类和对象
- 企业实战|企业FTP搭建
- MarioTCP, take it..
- ActiveMQ(19):高级特性之独有消费者(Exclusive Consumer)
- QT运行时加载UI文件
- 面试评估表和评估指标雷达图(附模板下载)
- 关于locale的设定
- 525、Java工程师的进阶之路 -【 RocketMQ (二)】 2022.01.06
- wlacm一笔画问题(图的遍历) 题解
- jar包本地能启动但不能在服务器上启动
- web开发从入门到精通一(详细)
- LINUX KALI初级渗透XP系统入门学习总结(一)
- 容器PaaS资源导航
- 语义分割模型中分辨率恢复_语义模型在智慧工业运营中的作用
- 倒计时工具类:PYContDownManager