实验一、进程的创建和撤销

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一.实验目的

(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);

}

 

 

 

【操作系统】进程创建实验 【操作系统】创建进程实验 阅读详情

相关推荐

操作系统实验进程管理(含成功运行C语言源代码)

源程序中共构造了5个函数方法来实现进程创建、(运行进程的)显示、换出、结束(杀死)唤醒。

南小山的博客 6万+

操作系统实验进程控制

适用于计算机操作系统第3版微课版教材

线程的创建撤销实验

实验 线程的创建撤销 实验目的 掌握线程的创建撤销 线程的有关概念 线程,是操作系统能够进行运算调度的最小单位。 它被包含在进程中,是进程中的实际运作单位。 线程是独立调度分派的基本单位。 条线程指的是进程个单顺序的控制流。 进程中可以并发多个进程,每条线程并行执行不同的任务。 认识工具 1 创建线程 CreateThread()完成线程的创建,它在调用进程...

G453473123的博客 3495

操作系统进程实验报告(1).doc

操作系统进程实验报告(1).doc

实验进程创建、调度撤消

实验进程创建、调度撤消:编写程序,来模拟进程创建撤消,要求通过终端键盘输入几个作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB(进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、程序大小、已用CPU时间、进程状态等等)的内容送到终端显示器上输出。

m0_71233415的博客 2226

实验 进程创建撤销控制(

实验目的 1、掌握进程的概念,了解进程的结构、状态,认识进程并发执行的实质。 2、熟悉进程控制相关的命令。 2、能够使用系统调用完成进程创建,形成多进程并发执行的环境. 实验基础 、LINUX进程 引入进程概念,是为了描述多道程序的并发执行。为了执行个程序,首先要创建进程。资源足够时,os为进程分配内存资源。操作系统利用PCB来控制管理进程,其中为每个进程赋予惟进程标识符就放在PCB中。 Linux操作系统本身的运行,就是由系列服务进程系统监控进程等组成的,在Linux上运行的任何东西,包括

@ZhengLan的博客 1943

2020-11-14:进程创建撤销算法(C++)——操作系统

1. 实验目的: (1) 加深对进程概念的理解进程创建撤销算法; (2) 进步认识并发执行的性质 2. 实验内容: (1) 系统级——以普通用户身份认识Windows的进程管理。通过Windows的“任务管理器”观察进程创建、切换撤销。 (2) 语言级——以普通程序猿身份认识高级语言VC++/JAVA/VB的进程创建撤销工具。 (3) 模拟级——以OS设计师身份编程模拟实现进程创建撤销功能,并在屏幕上观察进程活动的结果 3. 源程序: (2)语言级:(C语言) 什么是原语........

…… 6090

操作系统原理实验报告——进程控制描述

实验目的 利用Windows提供的API函数,编写程序,实现进程创建终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。 二、实验内容 1、进程创建终止。编写段程序,可以创建进程,并终止当前创建进程。试观察记录程序执行的结果,并分析原因。 2、利用VC++6.0实现上述程序设计调试操作,对于进程创建的成功否、终止进程操作的成功否提供定的提示框。 3、通过阅读分析实验程序,学习创建进程、观察进程

The_Dan的博客 6025

Linux操作系统实验 | 第二章 | 实验 创建进程

进程协同工作就是要协调好两个或两个以上的进程,使之安排好先后次序并依次执行,可以用wait()或waitpid()函数来实现这点。当只需要等待任进程运行结束时,可在父进程中调用wait()函数。若需要等待某特定子进程的运行结果时,需调用waitpid( )函数,它是非阻塞型函数。​ 学会通过基本的Linux进程控制函数,由父进程创建进程,并实现协同工作。创建两个进程,让子进程读取个文件,父进程等待子进程读完文件后继续执行。

weixin_53249168的博客 1829

操作系统实验--进程创建撤销控制

进程创建撤销控制 实验名称 进程创建撤销控制 二、实验内容 学生独立设计用于描述进程的数据结构,完成进程创建、同步互斥。 三、实验原理设计思路 在Linux系统下用fork()函数创建进程,lockf()函数对进程加锁,实现进程创建撤销控制。 四、源代码 1.进程创建 #include<stdio.h> main() { int p1,p2; while((p1=fork())==-1); if(p1==0) putchar('b'); else { while((p2=

海到无边天作岸 山登绝顶我为峰 7329

操作系统之进程创建撤销的C语言实现

进程创建撤销实验目的实现总体设计代码实现 实验目的 模拟进程创建、就绪、撤销,并按优先级对进程排序。 实现 总体设计 数据结构定义 结构体PCB: 进程名、ID、运行时间、优先级等,队列的排序按优先级排序。 PCB空间: 结构体PCB数组 队列: 就绪队列,消息缓冲队列 函数 Create()—进程创建: 从PCB空间申请个空PCB,填入进程参数,插入就绪队列; kill()—进程终止: 将指定的就绪进程移出就绪队列,清楚PCB信息; display()-就绪队列输出: 输出就绪队列中的进程信息,以

David_house的博客 9305

操作系统实验:线程的创建撤销

实验目的 (1)熟悉windows系统提供的线程创建撤销系统调用。 (2)掌握windows系统环境下线程的创建撤销方法。 (3)掌握CreateThread()函数ExitThread()函数。 ...

1999吴的博客 1万+

操作系统():进程线程

操作系统 进程线程

goodgoodstudy___的博客 750

【操作系统】实验 线程的创建撤销

实验 实验目的 (1)熟悉windows系统提供的线程创建撤销系统调用. (2)掌握windows系统环境下线程的创建撤销方法. 二、实验准备 1.创建线程 CreateThread()函数: 在调用进程的地址空间上创建个线程,执行指定的函数,并返回新建立的线程的句柄。 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //为线程指定安全属性 DWORD dwStackSize, //线程堆栈的大小 LPV

晚安Alice 6482

操作系统实验:线程的创建撤销

实验:线程的创建撤销 2.1.1 实验目的 (1)熟悉Windows系统提供的线程创建撤销系统调用。 (2)掌握Windows系统环境下线程的创建撤销方法。 2.1.2 实验准备知识 1.线程的创建 CeateThread()完成线程的创建。它调用进程的地址空间上创建个线程,执行指定的函数,并返回创建的线程的句柄。 原型: HANDLE CreateThread( LPSECURITY_...

weixin_43871692的博客 6411

计算机操作系统实验之模拟进程管理(C语言)

利用C语言模拟实现操作系统中的进程管理

小姚的博客 3万+

操作系统实验、线程的创建撤销

实验:线程的创建撤销 实验目的 (1)熟悉windows系统提供的线程创建撤销系统调用。 (2)掌握windows系统环境下线程的创建撤销方法。 二、实验准备 线程的概念 (1)线程(thread),是操作系统能够进行运算调度的最小单位。 (2)它被包含在进程之中,是进程中的实际运作单位。 (3)线程是独立调度分配的基本单位。 (4)条线程指的是进程个单顺序的控制流。 (5)进程中可以并发多个线程,每条线程并行执行不同的任务。 工具 1.创建线程 CreateThread()完成线

weixin_44775375的博客 3051

操作系统实验进程控制(C语言版)

操作系统实验————进程控制实验目的1.理解进程的概念,明确进程程序的区别。2.理解并发执行的实质。3.掌握进程创建、睡眠、撤销进程控制方法。二、实验内容1.用C语言编写程序,模拟实现创建新的进程:查看运行进程;换出某个进程:杀死运行进程等功能。三、实验准备1.进程的含义:2.进程状态(1)就绪状态(2)执行状态(3)阻塞状态(4)新状态(5)终止状态3.进程状态之间的装换1.进程控制块进程控制块的作用2.进程控制块的内容1.进程标识信息1.外部标识符:由创建者命名,通常是由字母、数字所组成的个字符

菜鸟一枚 1万+

【操作系统④】——进程控制【原语 Linux进程创建 阻塞唤醒 撤销 挂起激活】

关键字: Linux进程创建的实例 进程控制原语 进程的阻塞唤醒 进程撤销 进程的挂起激活

Wang_Dou_Dou_的博客 5005
上一篇: hadloop入门知识 Hive+HBase+HDFS+MapReduce十分钟快速入门(转载)
下一篇: asp.net三层架构详解
mycomputerxiaomei
博客等级 码龄17年 64粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值