操作系统——Windows 进程管理

Windows进程详解(完整版) 阅读详情

一、实验题目

Windows 进程管理

二、实验目的

(1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。

(2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操 作系统的进程概念,理解 Windows 进程的“一生”。

(3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

三、实验内容(实验原理/运用的理论知识、算法/程序流程图、步骤和方法、关键代码)

1-1 编写基本的 Win32 Consol Application

这个实验的主要目的是熟悉编写C/C++控制台程序,对于创建一个C/C++控制台程序,我常用的有两种方式,逐一说明其优缺点。

第一种方式是在菜单栏点击 File – New – File… ,在弹出的窗口中选择 C/C++ source ,然后选择代码类型是C还是C++,之后设置文件保存的位置,然后就会生成一个.c(.cpp)文件,在这个文件中就可以编写c(c++)代码了。编写完成后在菜单栏 点击 Build – Build and run 或者直接按F9,即可查看输出。这种方法创建C/C++控制台程序,优点是轻便,文件最后只生成三个,源代码.c文件,.o文件还有exe文件,缺点是不支持调试。适合轻量级开发

第二种方法是新建一个工程,在菜单栏点击 File – New – Project…,弹出的界面选择 Console Application ,然后选择代码类型和文件保存目录,之后它会生成一个该项目的文件夹,然后有一个main.c(main.cpp)文件,在这个文件中编写代码。这个项目中的核心文件是.cbp,还会生成很多从属文件,优点是调试方便,可以用Debug单步调试,缺点是生成文件多,适合大型项目开发。

本次操作系统课程设计均是用第二种方式生成C++项目编写。

1-2 创建进程

1.创建一个C++项目,将指导书中的1-2代码复制到main.cpp文件中,然后编译运行

2.按照代码中的注释提示修改代码,看有什么不同,共有两处修改

3.通过查阅相关资料分析为何会出现这样的结果

关键代码

    BOOL bCreateOK=::CreateProcess(

                       szFilename, // 产生这个 EXE 的应用程序的名称

                       szCmdLine, // 告诉其行为像一个子进程的标志

                       NULL, // 缺省的进程安全性

                       NULL, // 缺省的线程安全性

                       FALSE, // 不继承句柄

                       CREATE_NEW_CONSOLE, // 使用新的控制台

                       NULL, // 新的环境

                       NULL, // 当前目录

                       &si, // 启动信息

                       &pi) ; // 返回的进程信息

1-3 父子进程的简单通信及终止进程

1.创建一个C++项目,将指导书中的1-3代码复制到main.cpp文件中,然后按F9查看运行结果

2.根据注释修改代码,查看结果

3.查阅资料,分析原因

关键代码

// 决定其行为是父进程还是子进程

    if (argc>1 && :: strcmp(argv[1], "child" ) == 0)

    {

        Child() ;

    }

    else

    {

        Parent() ;

    }

四、实验结果与分析

(1)基本的Win32 Console Application:

预期结果:编译成功并生成可执行文件。运行可执行文件后,在命令提示符窗口中显示运行结果。

  分析:这个实验主要是为了验证编译环境的正确性,并确保能够成功编译和执行基本的Win32控制台应用程序。

 

(2)创建进程:

预期结果:每次运行程序时,它会启动自身的克隆进程,并显示每个进程的系统进程ID和在进程列表中的位置。

    分析:通过创建进程的方式,可以生成多个相同的进程实例。每个进程将显示其自己的系统进程ID和在进程列表中的位置。通过修改nClone的定义和初始化方式,可以控制生成的进程数量。

 

在第一次修改中,nClone被定义为0,并将其初始化为0。这意味着在程序开始运行时,初始的克隆ID将为0。

在第二次修改中,nClone的初始化被修改为0,但定义的位置与第一次修改不同。

当修改nClone的值时,即在  :: sscanf(argv[1] , "%d" , &nClone) ;后nClone=0;重新赋值,此时nClone始终为0,此时进程不断派生。

从main()函数开始,首先判断argc的值(argc初始值默认为1)因为argc不满足大于1,所以不能将argv[1]赋值给nClone;然后nClone < c_nCloneMax ,则调用StartClone (++nClone)函数,创建子进程;创建子进程后,argc的值变为2,然后将自增的nClone赋值argv[1],然后将继续执行main()函数,直到(nClone >c_nCloneMax),跳出,结束创建新进程。

(3)父子进程的简单通信及终止进程:

   预期结果:父进程创建子进程,并通过命令行参数将克隆号传递给子进程。子进程接收到克隆号后,在命令提示符窗口中显示自己的系统进程ID和克隆号。父子进程之间通过互斥体(Mutex)进行同步。

  分析:从main()函数开始,首先判断argc的值(argc初始值默认为1),决定进行父进程还是子进程,因为argc不满足大于1,所以调用parent()函数,在执行parent()函数过程中调用StartClone() ;然后通过sprintf(szCmdLine, “”%s"child" , szFilename)将argv[1]赋值child,后面满足条件后调用child()函数;由于设置了互斥信号,则只允许一个进程进行,所以只有当父进程释放互斥信号hMutexSuicide时,子进程检测获得才结束进程

程序执行过程的大致描述:

1.程序开始运行,进入main()函数。

2.根据命令行参数判断当前进程是父进程还是子进程。

3.如果是父进程,则执行Parent()函数。

4.在Parent()函数中,创建一个互斥体对象,然后调用StartClone()函数创建子进程。

5.父进程等待用户的键盘输入。

6.当用户按下键盘时,父进程释放互斥体的所有权,发送信号给子进程。

7.子进程执行Child()函数。

8.在Child()函数中,子进程打开父进程创建的互斥体对象,并等待互斥体的信号。

9.当子进程收到互斥体的信号时,输出相应信息,并关闭互斥体的句柄,然后结束子进程。

10.父进程释放互斥体的句柄,并结束父进程的执行。

五、小结与心得体会

1.进程是操作系统中的基本概念,理解进程的创建、执行和管理对于学习操作系统和编程非常重要。

2.Windows提供了丰富的API和函数来管理进程,如CreateProcess、GetModuleFileName和GetProcessId等。熟悉这些函数的用法可以方便地创建、控制和通信进程。

3.创建子进程是一种常见的并发编程模式,可以通过克隆主进程来实现并行处理任务,每个进程都可以独立执行。

4.进程之间可以通过命令行参数进行通信,父进程可以将信息传递给子进程,并通过子进程的输出结果进行观察和分析。

5.互斥体(Mutex)是一种用于进程间同步的机制,可以确保多个进程之间的顺序执行和互斥访问共享资源。

6.调试工具和跟踪语句对于理解程序的执行过程和调试错误非常有帮助,可以加深对进程管理的理解。

7.实验中的代码示例是基于Windows系统和Win32 API的,但进程管理的概念和原理在其他操作系统中也是通用的。通过学习Windows进程管理,可以为理解和应用其他操作系统提供基础。

操作系统课设之Windows 进程管理 操作系统课程设计 Windows进程管理 C创建进程 阅读详情

相关推荐

如何在命令提示符窗口下运行Win32控制台应用程序

本文主要介绍Windows控制台应用程序,以及如何在命令提示符下运行C++应用程序。

程序员猴小萌的博客 3995

Windows进程的创建与结束

在运行结果中,观察可返现,“parent process ends”应该是位于启动子进程之后,但却是优先输出;父进程在子进程结束之后才关闭进程。如果直接注释掉WaitForSingleObject(),执行结果没有变化,经过实验,我发现这个API并没有终止线程的功能,只是用来捕捉子线程的执行时间(第二个参数为等待的时间),如果想要实现父进程不等待子进程结束,则需要使用官方提供的ExitProcess或者TerminateProcess来实现(官方建议使用ExitProcess)。

Fishermen_sail的博客 2723

操作系统之Windows 进程管理中的创建子进程

创建子进程:本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程 ID和它在进程列表中的位置。 步骤 1:创建一个“Win32 Consol Application”工程,然后可复制下面中的程序,编译成可执行文件或者使用 VC++ 6.0创建编译执行下面代码。 步骤 2:在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。按下ctrl+alt+del,调用...

rothschild666的博客 3765

实验一 Windows任务管理器的进程管理

需要注意的是,相同的进程图像名,每次运行的“PID”号都不会相同,因为 PID 的分配并不固定,是在进程启动是由系统随机分配的,所以进程每次启动的进程一般都不会一样。通过本次上机课的学习,了解到了如何使用任务管理器终止进程、查看进程的一些详细信息如:CPU使用率、内存占用等情况,并通过命令如:tasklist、tasklist/?步骤三:查看每个进程的名称,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个进程的优先级等等。点击“详细信息”选择一个进程,单击右键,选择“设置优先级”。

此人很懒 3163

操作系统课设-Windows 进程管理

一 实验题目 实验一 Windows 进程管理 二、实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。 三、实验内容 通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。 四、实验结果与分析 1-1 结果截图如下: 打印“Hello, Win32 Consol App

weixin_45783317的博客 1388

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

操作系统(Linux与Windows)的进程管理

进程 描述和管理程序的“运行过程”-------进程 进程概念 定义:进程是程序在某个数据集合上的一次运行活动 进程的特征 动态性 进程是程序的一次执行过程,动态产生消亡 并发性 进程可以同其他程序一起向前推进 异步性 进程按各自的速度向前推进 独立性 进程是系统分配资源和调度CPU的单位 进程的状态 运行状态 进程已经占有CPU,在CPU上运行 就绪状...

include的博客 3913

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

操作系统课设——Windows 进程管理

一、实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。 (3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。 二、实验内容和步骤 (1)编写基本的 Win32 Consol Application 步骤 1:登录进入 Windows 系统,启动 VC++ 6.0。

qq_53581188的博客 6085

手把手教你用srec_cat生成带CRC校验的STM32固件(解决OTA常见校验失败问题)

本文针对STM32 OTA升级中常见的固件校验失败问题,提供了一套使用srec_cat工具自动生成带CRC32校验固件的实战解决方案。文章详细拆解了命令参数,指导开发者如何为固件嵌入CRC值、处理地址偏移及合并文件,从而确保Bootloader能可靠校验固件完整性,提升远程更新的稳定性。

kappa的博客 783

HarmonyOS ArkTS开发实战:用Axios封装一个通用的网络请求工具类(附完整代码)

本文详细介绍了如何在HarmonyOS ArkTS开发中利用Axios封装一个通用的网络请求工具类,涵盖架构设计、核心模块实现、UI状态联动及高级功能扩展。通过单例控制器、拦截器链配置和Token自动刷新机制,提升网络请求的稳定性和可维护性,适用于各类HarmonyOS应用开发场景。

weixin_30772105的博客 490

操作系统实验:Windows进程管理

实验项目名称: Windows进程管理 一、实验目的 1、学习windows系统提供的线程创建、线程撤销、线程同步等系统调用; 2、利用C++实现线程创建、线程撤销、线程同步程序; 3、完成思考、设计与练习。 二、实验内容 1、写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。 2、向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。 3、如何创建3个线程A, B, C,并建立先后序执行关系A→B

m0_45294651的博客 4210

反激系列-详细到每个容阻的原理之RCD吸收(1)

1、漏感尖峰电压会被RCD吸收,漏感能量一定,电容越大,电容充电的电压就越低,吸收能力就越强,MOS漏极的电压就越低。2、在漏感能力释放完之后(这个过程一般只有一个周期的3%时间),是要通过R1释放掉电容吸收的能量的,把电容的电压降下来方便下一次漏感尖峰来之前再进行吸收。3、电容容量和电阻需要合理搭配,容量足够即可,足够能吸收漏感尖峰电压,不至于超过MOS耐压。电阻需要足够小,小到在放电阶段把电容电压下降到MOS的电压平台。

Cuxiaoweiba的博客 3万+

操作系统课设-Windows进程管理

操作系统课设日志

jeazim的博客 1139

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1629

【华为OD机试】真题E卷-一种字符串压缩表示的解压(C++)

有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串aaabbccccd 经过压缩变成字符串 3abb4cd请您编写解压函数,根据输入的字符串, 判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串 否则输出字符串!error来报告错误。

u014481728的博客 892

深入理解操作系统原理之Windows进程管理

一、Windows 2000的基元成分 对象、进程、线程是Windows2000三个基元成份,它们之间有互相交叉的关系。 1、对象 对象是一个抽象的数据结构,在Windows2000中用以表示广义的资源。它是构成OS的三个基元成份中非活动的成份,对象是数据和有关操作的封装体,它包装数据、数据的属性以及可以施加于数据的操作等三个成份。具有相同特性的对象也可归为一个对象类,在软件设计中定义了

想作会飞的鱼的博客 1万+

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 288

操作系统课程设计-Windows 进程管理

本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是dev c++5.11。

qq_63306482的博客 2268

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

windows mobile 5.0 进程管理、窗体管理、重启和关闭操作系统

1、进程管理:在NET Compact Framework里进程管理的函数相对要比net Framework里要简化,不过仍然可以比较好的控制程序进程。A.启动进程:在启动进程后返回进程的id<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlight

守望轩 1356

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机基础——操作系统

本章将会讲解计算机的操作系统。操作系统(Operating System,OS)就好比一个计算机内部的管理者,是管理和控制计算机硬件与软件资源的计算机程序,直接运行在“裸机”上的最基本的系统软件,任何其他应用软件都必须在操作系统的支持下才能运行,操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件,软件及数据资源,控制程序运行,为其他应用软件提供支持等。

yj11290301的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 擦作系统期末简答题
下一篇: 操作系统——Linux 进程控制
jakeonil
博客等级 码龄5年 1万+粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jakeonil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值