一、实验目的

利用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;
}

操作系统原理实验报告——进程控制与描述相关推荐

  1. ZUCC_操作系统原理实验_Lab9进程的通信消息队列

    lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...

  2. 《操作系统》实验报告——进程管理

    理论知识 Linux--进程管理 1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程争用资源的现象,学习解决进程互斥的方法. 2.实验预 ...

  3. 《操作系统》实验报告——熟悉Linux基础命令及进程管理

    理论知识 Linux--进程管理 Linux--Linux C语言编程基础知识 手把手教你安装Linux虚拟机 一.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执 ...

  4. ZUCC_操作系统原理实验_实验九 消息队列

    操作系统原理实验报告 课程名称 操作系统原理实验 实验项目名称 实验九 消息队列 实验目的 了解 Linux 系统的进程间通信机构 (IPC): 理解Linux 关于消息队列的概念: 掌握 Linux ...

  5. 操作系统原理实验-进程同步

    操作系统原理实验报告 实验题目 实验二进程同步 实验二.进程同步 1.1 实验目的 现代操作系统的核心是多道程序设计.多处理器和分布式处理器,这些方案和操作系统设计技术的基础都是并发.当多个进程并发执 ...

  6. 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

    操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...

  7. 8255交通灯实验的微型计算机,微机原理实验四实验报告8255控制交通灯实验

    <微机原理实验四实验报告8255控制交通灯实验>由会员分享,可在线阅读,更多相关<微机原理实验四实验报告8255控制交通灯实验(4页珍藏版)>请在人人文库网上搜索. 1.实验四 ...

  8. 东北大学软件学院操作系统v实验报告

    课程编号:B080000070     <操作系统>实验报告             姓名   学号   班级   指导教师   实验名称 <操作系统>实验 开设学期 2016 ...

  9. linux 实验2 进程创建,实验2Linux进程控制与通信

    实验2Linux进程控制与通信 实验 2 Linux 进程控制与通信1. 实验目的(1 ) 进一步认识并发执行的概念,认识父子进程及进程创建原理:(2 ) 了解 Linux 系统中进程通信的基本原理. ...

  10. 配置微型计算机实验报告,微型计算机原理实验报告.docx

    微型计算机原理实验报告 微型计算机原理实验报告专业班级: 通信工程2013级 学生姓名: 周博文 学 号: 2013221105200097 完成时间: 2015月12月 实验一 运行并分析Hello ...

最新文章

  1. C语言指出下列程序的错误,2012年计算机二级C语言精编教程第二章(8)
  2. App 上传遇到问题
  3. 软件测试mysql基础面试题_测试面试题合集之数据库
  4. 饼图的引导线怎么加_第0004期,复工了,这个Excel渠道分析(矩阵)图送给大家...
  5. 《Head First设计模式》第八章笔记-模板方法模式
  6. python面向对象类_python面向对象-类和对象
  7. 企业实战|企业FTP搭建
  8. MarioTCP, take it..
  9. ActiveMQ(19):高级特性之独有消费者(Exclusive Consumer)
  10. QT运行时加载UI文件
  11. 面试评估表和评估指标雷达图(附模板下载)
  12. 关于locale的设定
  13. 525、Java工程师的进阶之路 -【 RocketMQ (二)】 2022.01.06
  14. wlacm一笔画问题(图的遍历) 题解
  15. jar包本地能启动但不能在服务器上启动
  16. web开发从入门到精通一(详细)
  17. LINUX KALI初级渗透XP系统入门学习总结(一)
  18. 容器PaaS资源导航
  19. 语义分割模型中分辨率恢复_语义模型在智慧工业运营中的作用
  20. 倒计时工具类:PYContDownManager

热门文章

  1. 使用POI导出数据以及性能比较
  2. 计算机组成原理考研笔记
  3. 软件测试--计算机基础
  4. 网络安全实验7 防火墙 Iptables应用
  5. 电脑文件一键实时备份同步至云端(百度云盘)
  6. 关于MUSIC算法的知识点和MATLAB程序详细注释——学习笔记
  7. matlab里的copula函数,常见copula函数简介
  8. MySQL数据库数据类型
  9. 基于51单片机的循迹小车
  10. linux软件安装rar,Rar for Linux的安装方法