实验一:进程控制描述及控制

上传人:人*** 文档编号:568524744 上传时间:2024-07-25 格式:PDF 页数:10 大小:651.94KB
返回 下载 相关 举报
实验一:进程控制描述及控制_第1页
第1页 / 共10页
实验一:进程控制描述及控制_第2页
第2页 / 共10页
实验一:进程控制描述及控制_第3页
第3页 / 共10页
实验一:进程控制描述及控制_第4页
第4页 / 共10页
实验一:进程控制描述及控制_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《实验一:进程控制描述及控制》由会员分享,可在线阅读,更多相关《实验一:进程控制描述及控制(10页珍藏版)》请在金锄头文库上搜索。

1、-实验一:进程控制描述与控制实验一:进程控制描述与控制1Windows1Windows任务管理器的进程管理任务管理器的进程管理一、一、实验名称实验名称Windows任务管理器的进程管理二、二、实验目的实验目的通过在 Windows 任务管理器中对程序进程进展响应的管理操作, 熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。三、三、实验容与步骤实验容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入 Windows 环境,单击 Ctrl + Alt + Del 键,或者右键单击任务栏,在快捷菜单中单击任务管理器命令,翻开任务管理器窗口

2、。在本次实验中,你使用的操作系统版本是:_Windows_*P_当前机器中由你翻开,正在运行的应用程序有:1) _ _2) _实验一_3) _操作系统_4) _百度首页 _5) _ftp:/172.16.20.168_Windows任务管理器的窗口由_4_个选项卡组成,分别是:1) _应用程序_2) _进程_3) _ 性能_4) _联网_当前进程选项卡显示的栏目分别是 (可移动窗口下方的游标/箭头, 或使窗口最大化进展观察) : 1. 1. 使用任务管理器终止进程使用任务管理器终止进程步骤步骤 1 1:单击进程选项卡,一共显示了_40_个进程。请试着区分一下,其中:系统 (SYSTEM) 进程

3、有_25_个,填入表 3-1 中。表 3-1实验记录 Wmiprvse cidaemon cidaemon cidaemon cisvc csrss SYSTEM SYSTEM SYSTEM SYSTEM SYSTEM SYSTEM 00 0000 50 00 00 5376k 300k 856k 284k 924k 7412k.z- mqtgsvc mqsvc snmp tcpservcs SmssSystemSystem Idle ProcesswinlogonserviceslsasssvchostmDNSRespondersvchostinetinfosamservicePGPserv

4、PandoraServicespoolsvMDMSYSTEM SYSTEM SYSTEM SYSTEM SYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEMSYSTEM 00 00 00 00 000099000000000000000000000000 4144k 6632k 4340k 3840k 404k300k28k1684k5776k1100k5324k3920k18716k10608k2460k6880k9148k5688k3416k效劳 (SERVICE) 进程有_

5、5_个,填入表 3-2 中。表 3-2实验记录映像名称用户名CPU存使用 Svchost alg msdtc Svchost SvchostLOCAL SERVICELOCAL SERVICENETWORK SERVICENETWORK SERVICENETWORK SERVICE 00 00 00 00 00 3996k 3960k 5228k 5048k 3888k用户进程有_10_个,填入表 3-3 中。表 3-3实验记录映像名称用户名CPU存使用 realsched Bufmonitor Ctfmon NCClt.dll LenRCClient PGPtray Administrato

6、r Administrator Administrator Administrator Administrator Administrator 00 00 00 00 00 00 356k 2988k 3512k 9932k 4588k 15100k.z- SogouCloudE*plorerTaskmgrWINWORD AdministratorAdministratorAdministratorAdministrator 00000000 4920k10436k2708k71188k步骤步骤 2 2:单击要终止的进程,然后单击完毕进程按钮。终止进程,将完毕它直接或间接创立的所有子进程。例如

7、,如果终止了电子程序 (如Outlook 98) 的进程树, 则同时也终止了相关的进程, 如 MAPI 后台处理程序 mapisp32.e*e。请将终止*进程后的操作结果与原记录数据比照,发生了什么:_终止 QQ.e*e 后 QQE*ternal.e*e 也会完毕, _ 2. 2. 显示其他进程记数器显示其他进程记数器在进程选项卡上单击查看菜单,然后单击选择列命令。单击要增加显示为列标题的工程,然后单击确定。为对进程列表进展排序,可在进程选项卡上单击要根据其进展排序的列标题。而为了要反转排序顺序,可再次单击列标题。经过调整,进程选项卡现在显示的工程分别是:_映像名称、 PID、 用户名、 回话

8、 ID、 CPU、 CPU 时间、 工作设置(存)、 峰值工作设置(存)、工作设置增量(存)、存专用工作集 、I/O 读取、I/O 写入、命令行、描述通过对查看菜单的选择操作,可以在任务管理器中更改显示选项:在应用程序选项卡上,可以按详细信息、大图标或小图标查看。在性能选项卡上, 可以更改 CPU 记录图, 并显示核时间。 显示核时间选项在CPU使用和CPU 使用记录图表上添加红线。红线指示核操作占用的CPU 资源数量。 3. 3. 更改正在运行的程序的优先级更改正在运行的程序的优先级要查看正在运行的程序的优先级,可单击进程选项卡,单击查看菜单,单击选择列-根本优先级命令,然后单击确定按钮。为

9、更改正在运行的程序的优先级,可在进程选项卡上右键单击您要更改的程序,指向设置优先级,然后单击所需的选项。更改良程的优先级可以使其运行更快或更慢 (取决于是提升还是降低了优先级) , 但也可能对其他进程的性能有相反的影响。记录操作后所体会的结果:改变优先级可能造成系统不稳定。 在多处理器计算机上, 用户还可以给处理器指派进程,将程序或进程的执行限制在选定的处理器上,但这有可能导致总体性能的下降。2Windows Server 20032Windows Server 2003 进程的进程的 一生一生一、一、实验名称实验名称Windows Server 2003 进程的一生二、实验目的二、实验目的1

10、) 通过创立进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟.z-悉操作系统的进程概念,理解Windows Server 2003进程的一生。2) 通过阅读和分析实验程序,学习创立进程、观察进程和终止进程的程序设计方法。三、实验容与步骤三、实验容与步骤1. 创立进程2. 正在运行的进程3. 终止进程Windows 所创立的每个进程都是以调用_CreateProcess()_API 函数开场和以调用_E*itProcess()_或_TerminateProcess()_API函数终止。1.1. 创立进程创立进程本实验显示了创立子进程的根本框架。 该程序只是再一次地启动自身, 显示

11、它的系统进程 ID 和它在进程列表中的位置。步骤步骤 1 1:登录进入 Windows Server 2003。步骤步骤 2 2:在开场菜单中单击程序-Microsoft Visual Studio 6.0MicrosoftVisual C+ 6.0命令,进入 Visual C+窗口。步骤步骤 3 3:在工具栏单击 翻开按钮,在 翻开对话框中找到并翻开实验源程序3-5.cpp。清单 3-5创立子进程 / proccreate 工程 # include # include # include / 创立传递过来的进程的克隆过程并赋于其 ID 值 void StartClone(int nClone

12、ID) / 提取用于当前可执行文件的文件名 TCHAR szFilenameMA*_PATH ; : GetModuleFileName(NULL, szFilename, MA*_PATH) ; / 格式化用于子进程的命令行并通知其 E*E 文件名和克隆 ID TCHAR szCmdLineMA*_PATH ; : sprintf(szCmdLine, %s %d, szFilename, nCloneID) ; / 用于子进程的 STARTUPINFO 构造 STARTUPINFO si; : ZeroMemory(reinterpret_cast (&si) , sizeof(si) )

13、 ; si.cb = sizeof(si) ;/ 必须是本构造的大小 / 返回的用于子进程的进程信息 PROCESS_INFORMATION pi; / 利用同样的可执行文件和命令行创立进程,并赋于其子进程的性质 BOOL bCreateOK = : CreateProcess( szFilename,/ 产生这个 E*E 的应用程序的名称 szCmdLine,/ 告诉其行为像一个子进程的标志 NULL,/ 缺省的进程平安性 NULL,/ 缺省的线程平安性 FALSE,/ 不继承句柄 CREATE_NEW_CONSOLE,/ 使用新的控制台 NULL,/ 新的环境 NULL,/ 当前目录 &s

14、i,/ 启动信息 &pi) ;/ 返回的进程信息 / 对子进程释放引用 if (bCreateOK) .z- : CloseHandle(pi.hProcess) ; : CloseHandle(pi.hThread) ; int main(int argc, char* argv ) / 确定进程在列表中的位置 int nClone(0) ; if (argc 1) / 从第二个参数中提取克隆 ID : sscanf(argv1 , %d , &nClone) ; / 显示进程位置 std : cout Process ID: : GetCurrentProcessId() , Clone

15、ID: nClone std : endl; / 检查是否有创立子进程的需要 const int c_nCloneMa* = 25; if (nClone C_nCloneMa*) / 发送新进程的命令行和克隆号 StartClone(+nClone) ; / 在终止之前暂停一下 (l/2 秒) : Sleep(500) ; return 0; 步骤步骤 4 4:单击Build菜单中的pile 3-5.cpp命令,系统显示:This build mand requires an active project workspace. Would you like to create a defau

16、lt project workspace (build 命令需要一个活动的工程工作空间。你是否希望建立一个缺省的工程工作空间?)单击是按钮确认。系统对3-5.cpp 进展编译。步骤步骤 5 5:编译完成后,单击Build菜单中的Build 3-5.e*e命令,建立 3-5.e*e 可执行文件。操作能否正常进展?如果不行,则可能的原因是什么?_ 不 能 正 确 运 行 , 因 为 程 序 中 出 现 了 很 多 的 语 法 和 拼 写 方 面 的 错 误_步骤步骤 6 6:在工具栏单击E*ecute Program(执行程序) 按钮,或者按 Ctrl + F5 键,或者单击Build菜单中的E*

17、ecute 3-5.e*e命令,执行 3-5.e*e 程序。步骤步骤 7 7:按 Ctrl + S键可暂停程序的执行,按Ctrl + Pause (Break)键可终止程序的执行。清单 3-5 展示的是一个简单的使用CreateProcess()API 函数的例子。 首先形成简单的命令行, 提供当前的 E*E 文件的指定文件名和代表生成克隆进程的。 大多数参数都可取缺省值,但是创立标志参数使用了:_CREATE NEW CONSOLE_标志,指示新进程分配它自己的控制台, 这使得运行例如程序时, 在任务栏上产生许多活动标记。然后该克隆进程的创立方法关闭传递过来的句柄并返回main() 函数。在

18、关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。CreateProcess() 函数有_10_个核心参数?本实验程序中设置的各个参数的值是:a. _ szFilename_;b. _ szCmdLine_;c. _ NULL_;d. _ NULL_;.z-e. _ FALSE_;f. _ CREATE_NEW_CONSOLE_;g. _ NULL_;h. _ NULL_;i. _ &si_;j. _ &pi_。程序运行时屏幕显示的信息是: 2. 2. 正在运行的进程正在运行的进程本实验的程序中列出了用于进程信息查询的 API 函数 GetProcessVersio

19、n() 与GetVersionE*() 的共同作用,可确定运行进程的操作系统的版本号。步骤步骤 8 8:在 Visual C+ 窗口的工具栏中单击翻开按钮,在翻开对话框中找到并翻开实验源程序 3-6.cpp。清单 3-6使用进程和操作系统的版本信息 / version 工程 # include # include / 利用进程和操作系统的版本信息的简单例如 void main() / 提取这个进程的 ID 号 DWORD dwIdThis = : GetCurrentProcessId() ; / 获得这一进程和报告所需的版本,也可以发送 0 以便指明这一进程 DWORD dwVerReq =

20、 : GetProcessVersion(dwIdThis) ; WORD wMajorReq = (WORD) dwVerReq 16) ; WORD wMinorReq = (WORD) dwVerReq & 0*ffff) ; std : cout Process ID: dwIdThis , requires OS: wMajorReq wMinorReq std: endl; / 设置版本信息的数据构造,以便保存操作系统的版本信息 OSVERSIONINFOE* osvi*; : ZeroMemory(&osvi*, sizeof(osvi*) ) ; osvi*.dwOSVersi

21、onInfoSize = sizeof(osvi*) ; / 提取版本信息和报告 : GetVersionE*(reinterpret_cast (&osvi*) ) ; std : cout Running on OS: osvi*.dwMajorVersion . osvi*.dwMinorVersion = 5) / 改变优先级 : SetPriorityClass( : GetCurrentProcess() ,/ 利用这一进程 HIGH_PRIORITY_CLASS) ;/ 改变为 high / 报告给用户 std : cout Task Manager should now now

22、 indicate thisprocess is high priority std : endl; 步骤步骤 9 9:单击Build菜单中的pile 3-6.cpp命令,再单击是按钮确认。系统对3-6.cpp 进展编译。步骤步骤 1010:编译完成后,单击Build菜单中的Build 3-6.e*e命令,建立 3-6.e*e可执行文件。操作能否正常进展?如果不行,则可能的原因是什么?.z- _不能正常运行,因为程序中出现许多语法和拼写方面的错误_步骤步骤 1111:在工具栏单击E*ecute Program (执行程序) 按钮,执行 3-6.e*e 程序。运行结果:当前 PID 信息:_53

23、10 OS:00_当前操作系统版本: _6.1_系统提示信息: _ Task Manager should now now indicate thisprocess is highpriority._清单 3-6 中的程序向读者说明了如何获得当前的PID 和所需的进程版本信息。 为了运行这一程序,系统处理了所有的版本不兼容问题。接着,程序演示了如何使用 GetVersionE*() API 函数来提取 OSVERSIONINFOE*构造。这一数据块中包括了操作系统的版本信息。其中,OS : 5.0表示当前运行的操作系统是:_ Windows Server 2003_清单 3-6 的最后一段程序

24、利用了操作系统的版本信息,以确认运行的是WindowsServer 2003。代码接着将当前进程的优先级提高到比正常级别高。步骤步骤 1212:单击 Ctrl + Alt + Del 键,进入Windows 任务管理器,在应用程序选项卡中右键单击3-6任务,在快捷菜单中选择转到进程命令。在Windows 任务管理器的进程选项卡中,与3-6任务对应的进程映像名称是(为什么?) :_VCSPAWN.E*E_右键单击该进程名, 在快捷菜单中选择设置优先级命令, 可以调整该进程的优先级,如设置为高后重新运行 3-6.e*e 程序,屏幕显示有变化吗?为什么? _PID 信息变为 4488 OS:00_除

25、了改变进程的优先级以外, 还可以对正在运行的进程执行几项其他的操作, 只要获得其进程句柄即可。SetProcessAffinityMask() API函数允许开发人员将线程映射到处理器上;SetProcessPriorityBoost() API可关闭前台应用程序优先级的提升;而SetProcessWorkingSet() API可调节进程可用的非页面RAM 的容量;还有一个只对当前进程可用的 API 函数,即 SetProcessShutdownParameters() ,可告诉系统如何终止该进程。.z- 3. 3. 终止进程终止进程在清单 3-7 列出的程序中,先创立一个子进程,然后指令它

26、发出自杀弹互斥体去终止自身的运行。步骤步骤 1313:在Visual C+ 窗口的工具栏中单击翻开按钮,在翻开对话框中找到并翻开实验源程序 3-7.cpp。清单 3-7指令其子进程来杀掉自己的父进程 / procterm 工程 # include # include # include static LPCTSTR g_szMute*Name = ; / 创立当前进程的克隆进程的简单方法 void StartClone() / 提取当前可执行文件的文件名 TCHAR szFilename MA*_PATH ; : GetModuleFileName(NULL, szFilename, MA*_

27、PATH) ; / 格式化用于子进程的命令行,指明它是一个 E*E 文件和子进程 TCHAR szCmdLineMA*_PATH ; : sprintf(szCmdLine, %s child , szFilename) ; / 子进程的启动信息构造 STARTUPINFO si; : ZeroMemory(reinterpret_cast (&si) , sizeof(si) ) ;si.cb = sizeof(si) ;/ 应当是此构造的大小 / 返回的用于子进程的进程信息 PROCESS_INFORMATION pi; / 用同样的可执行文件名和命令行创立进程,并指明它是一个子进程 BO

28、OL bCreateOK = : CreateProcess( szFilename,/ 产生的应用程序名称 (本 E*E 文件) szCmdLine,/ 告诉我们这是一个子进程的标志 NULL,/ 用于进程的缺省的平安性 NULL,/ 用于线程的缺省平安性 FALSE,/ 不继承句柄 CREATE_NEW_CONSOLE,/ 创立新窗口,使输出更直观 NULL,/ 新环境 NULL,/ 当前目录 &si,/ 启动信息构造 &pi ) ;/ 返回的进程信息 / 释放指向子进程的引用 if (bCreateOK) : CloseHandle(pi.hProcess) ; : CloseHandl

29、e(pi.hThread) ; void Parent() / 创立自杀互斥程序体 HANDLE hMute*Suicide = : CreateMute*( NULL,/ 缺省的平安性 TRUE,/ 最初拥有的 g_szMute*Name) ;/ 为其命名 if (hMute*Suicide != NULL) / 创立子进程 std : cout Creating the child process. std : endl;.z- : StartClone() ; / 暂停 : sleep(5000) ; / 指令子进程杀掉自身 std : cout Telling the child pr

30、ocess to quit. std : endl; : ReleaseMute*(hMute*Suicide) ; / 消除句柄 : CloseHandle(hMute*Suicide) ; void Child() / 翻开自杀互斥体 HANDLE hMute*Suicide = : OpenMute*( SYNCHRONIZE,/ 翻开用于同步 FALSE,/ 不需要向下传递 g_szMute*Name) ;/ 名称 if (hMute*Suicide != NULL) / 报告正在等待指令 std : cout Child waiting for suicide instruction

31、s. std : endl; : WaitForSingleObject(hMute*Suicide, INFINITE) ; / 准备好终止,去除句柄 std : cout Child quiting. l & : strcmp(argvl , child ) = = 0) Child() ; else Parent() ; return 0; 清单 3-7 中的程序说明了一个进程从生到死的整个一生。 第一次执行时, 它创立一个子进程,其行为如同父亲。在创立子进程之前,先创立一个互斥的核对象,其行为对于子进程来说,如同一个自杀弹。当创立子进程时,就翻开了互斥体并在其他线程中进展别的处理工作,

32、同时等待着父进程使用ReleaseMute*() API 发出死亡信号。然后用Sleep() API 调用来模拟父进程处理其他工作,等完成时,指令子进程终止。当调用 E*itProcess() 时要小心,进程中的所有线程都被立刻通知停顿。在设计应用程序时,必须让主线程在正常的 C+ 运行期关闭 (这是由编译器提供的缺省行为) 之后来调用这一函数。 当它转向受信状态时, 通常可创立一个每个活动线程都可等待和停顿的终止事件。在正常的终止操作中,进程的每个工作线程都要终止,由主线程调用E*itProcess()。接着, 管理层对进程增加的所有对象释放引用, 并将用 GetE*itCodeProces

33、s() 建立的退出代码从 STILL_ACTIVE 改变为在 E*itProcess() 调用中返回的值。最后,主线程对象也如同进程对象一样转变为受信状态。等到所有翻开的句柄都关闭之后, 管理层的对象管理器才销毁进程对象本身。 还没有一种函数可取得终止后的进程对象为其参数,从而使其复活。当进程对象引用一个终止了的对象时,有好几个 API 函数仍然是有用的。进程可使用退出代码将终止方式通知给调用.z-GetE*itCodeProcess() 的其他进程。同时,GetProcessTimes() API 函数可向主调者显示进程的终止时间。步骤步骤 1414:单击Build菜单中的pile 3-7.

34、cpp命令,再单击是按钮确认。系统对 3-7.cpp 进展编译。步骤步骤 1515:编译完成后,单击Build菜单中的Build 3-7.e*e命令,建立 3-7.e*e可执行文件。操作能否正常进展?如果不行,则可能的原因是什么? _不能正常运行,因为程序中出现许多语法和拼写方面的错误_步骤步骤 1616:在工具栏单击E*ecute Program按钮,执行 3-7.e*e 程序。运行结果:1) _表示:_创立子进程并让子进程完毕_2) _表示:_子进程等待完毕, 在接到消息后完毕._步骤步骤 1717:在熟悉清单 3-7 源代码的根底上,利用本实验介绍的 API 函数来尝试改良本程序 (例如使用 GetProcessTimes() API函数) 并运行。四、实验结论四、实验结论此处用简洁的文字对实验过程进展总结,对实验过程中遇到的问题进展此处用简洁的文字对实验过程进展总结,对实验过程中遇到的问题进展分析等。分析等。.z

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号