实验一 进程控制描述与控制汇总Word文档格式.docx

上传人:b****2 文档编号:3960396 上传时间:2023-05-02 格式:DOCX 页数:29 大小:186.47KB
下载 相关 举报
实验一 进程控制描述与控制汇总Word文档格式.docx_第1页
第1页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第2页
第2页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第3页
第3页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第4页
第4页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第5页
第5页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第6页
第6页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第7页
第7页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第8页
第8页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第9页
第9页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第10页
第10页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第11页
第11页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第12页
第12页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第13页
第13页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第14页
第14页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第15页
第15页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第16页
第16页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第17页
第17页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第18页
第18页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第19页
第19页 / 共29页
实验一 进程控制描述与控制汇总Word文档格式.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验一 进程控制描述与控制汇总Word文档格式.docx

《实验一 进程控制描述与控制汇总Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一 进程控制描述与控制汇总Word文档格式.docx(29页珍藏版)》请在冰点文库上搜索。

实验一 进程控制描述与控制汇总Word文档格式.docx

1)应用程序________________________________________________

2)进程__________________________________________________________

3)性能_____________________________________________________________

4)联网______________________________________________________________

5)用户_____________________________________________________________

当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察):

1.使用任务管理器终止进程

步骤1:

单击“进程”选项卡,一共显示了__40_个进程。

请试着区分一下,其中:

系统(SYSTEM)进程有_25__个,填入表1-1中。

表1-1实验记录

映像名称

用户名

CPU

内存使用

Wmiprvse

SYSTEM

00

5376k

cidaemon

300k

856k

50

284k

cisvc

924k

csrss

7412k

mqtgsvc

SYSTEM 

4144k

mqsvc

6632k

snmp

4340k

tcpservcs

3840k

Smss

404k

System

SystemIdleProcess

99

28k

winlogon

1684k

services

5776k

lsass

1100k

svchost

5324k

mDNSResponder

3920k

18716k

inetinfo

10608k

samservice

2460k

PGPserv

6880k

PandoraService

9148k

spoolsv

5688k

MDM

3416k

服务(SERVICE)进程有__5__个,填入表1-2中。

表1-2实验记录

Svchost

LOCALSERVICE

3996k

alg

00

3960k

msdtc

NETWORKSERVICE

5228k

5048k

3888k

用户进程有___10__个,填入表1-3中。

表1-3实验记录

realsched

Administrator

356k

Bufmonitor

2988k

Ctfmon

3512k

NCClt.dll

9932k

LenRCClient

4588k

PGPtray

15100k

SogouCloud

4920k

Explorer

10436k

Taskmgr

2708k

WINWORD

71188k

提示:

在WindowsXP的“任务管理器”中,“进程”选项卡增加了一个“用户名”栏目,其中区分了SYSTEM、NETWORKSERVICE、LOCALSERVICE和用户的不同进程类别。

步骤2:

单击要终止的进程,然后单击“结束进程”按钮。

注意:

终止进程时要小心。

终止进程有可能导致不希望发生的结果,包括数据丢失和系统不稳定等。

因为在被终止前,进程将没有机会保存其状态和数据。

如果结束应用程序,您将丢失未保存的数据。

如果结束系统服务,系统的某些部分可能无法正常工作。

以下是在windows7旗舰版下完成的

终止进程,将结束它直接或间接创建的所有子进程。

例如,如果终止了电子邮件程序(如Outlook8)的进程树,那么同时也终止了相关的进程,如MAPI后台处理程序mapisp32.exe。

请将终止某进程后的操作结果与原记录数据对比,发生了什么:

____结束QQ.exe进程后,进程QQExternal.exe也会结束。

_

________________________________________________________________________

从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。

再从任务管理器中分别找到下列程序:

winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该进程为关键系统进程。

在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面图标变为空白、得到的结论是explorer.exe进程是windows资源管理器进程,是Windows图形界面外壳程序(说出explorer.exe进程的作用)。

2.显示其他进程记数器

在“进程”选项卡上单击“查看”菜单,然后单击“选择列”命令。

单击要增加显示为列标题的项目,然后单击“确定”。

为对进程列表进行排序,可在“进程”选项卡上单击要根据其进行排序的列标题。

而为了要反转排序顺序,可再次单击列标题。

经过调整,“进程”选项卡现在显示的项目分别是:

____映像名称、PID、用户名、回话ID、CPU、CPU时间、工作设置(内存)、峰值工作设置(内存)、工作设置增量(内存)、内存(专用工作集)、I/O读取、I/O写入、命令行、描述

通过对“查看”菜单的选择操作,可以在“任务管理器”中更改显示选项:

·

在“应用程序”选项卡上,可以按详细信息、大图标或小图标查看。

在“性能”选项卡上,可以更改CPU记录图,并显示内核时间。

“显示内核时间”选项在“CPU使用”和“CPU使用记录”图表上添加红线。

红线指示内核操作占用的CPU资源数量。

3.更改正在运行的程序的优先级

要查看正在运行的程序的优先级,可单击“进程”选项卡,单击“查看”菜单,单击“选择列”-“基本优先级”命令,然后单击“确定”按钮。

为更改正在运行的程序的优先级,可在“进程”选项卡上右键单击您要更改的程序,指向“设置优先级”,然后单击所需的选项。

更改进程的优先级可以使其运行更快或更慢(取决于是提升还是降低了优先级),但也可能对其他进程的性能有相反的影响。

记录操作后所体会的结果:

_______改变进程的优先级可能会使系统不稳定________________________________

在多处理器计算机上,用户还可以给处理器指派进程,将程序或进程的执行限制在选定的处理器上,但这有可能导致总体性能的下降。

第二部分Windows2000/XP进程控制

1.创建进程

2.正在运行的进程

3.终止进程

Windows所创建的每个进程都从调用CreateProcess()API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。

每一进程都以调用ExitProcess()或TerminateProcess()API函数终止。

通常应用程序的框架负责调用ExitProcess()函数。

对于C++运行库来说,这一调用发生在应用程序的main()函数返回之后。

1.创建进程

CreateProcess()调用的核心参数是可执行文件运行时的文件名及其命令行。

表1-4详细地列出了每个参数的类型和名称。

表1-4CreateProcess()函数的参数

参数名称

使用目的

LPCTSTRlpApplivationName

全部或部分地指明包括可执行代码的EXE文件的文件名

LPCTSTRlpCommandLine

向可执行文件发送的参数

LPSECURIITY_ATTRIBUTESlpProcessAttributes

返回进程句柄的安全属性。

主要指明这一句柄是否应该由其他子进程所继承

LPSECURIITY_ATTRIBUTESlpThreadAttributes

返回进程的主线程的句柄的安全属性

BOOLbInheritHandle

一种标志,告诉系统允许新进程继承创建者进程的句柄

DWORDdwCreationFlage

特殊的创建标志(如CREATE_SUSPENDED)的位标记

LPVOIDlpEnvironment

向新进程发送的一套环境变量;

如为null值则发送调用者环境

LPCTSTRlpCurrentDirectory

新进程的启动目录

STARTUPINFOlpStartupInfo

STARTUPINFO结构,包括新进程的输入和输出配置的详情

LPPROCESS_INFORMATIONlpProcessInformation

调用的结果块;

发送新应用程序的进程和主线程的句柄和ID

可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;

lpCommandLine参数允许调用者向新应用程序发送数据;

接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。

然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新进程什么行为。

经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻暂停。

当准备好时,应该使用ResumeThread()API来启动进程。

另一个常用的标志是CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口。

这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间。

接着是CreateProcess()函数调用所需要的三个通常使用缺省值的参数。

第一个参数是lpEnvironment参数,指明为新进程提供的环境;

第二个参数是lpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的特殊的当前目录;

第三个参数是STARTUPINFO数据结构所必需的,用于在必要时指明新应用程序的主窗口的外观。

CreateProcess()的最后一个参数是用于新进程对象及其主线程的句柄和ID的返回值缓冲区。

以PROCESS_INFORMATION结构中返回的句柄调用CloseHandle()API函数是重要的,因为如果不将这些句柄关闭的话,有可能危及主创进程终止之前的任何未释放的资源。

2.正在运行的进程

如果一个进程拥有至少一个执行线程,则为正在系统中运行的进程。

通常,这种进程使用主线程来指示它的存在。

当主线程结束时,调用ExitProcess()API函数,通知系统终止它所拥有的所有正在运行、准备运行或正在挂起的其他线程。

当进程正在运行时,可以查看它的许多特性,其中少数特性也允许加以修改。

首先可查看的进程特性是系统进程标识符(PID),可利用GetCurrentProcessId()API函数来查看,与GetCurrentProcess()相似,对该函数的调用不能失败,但返回的PID在整个系统中都可使用。

其他的可显示当前进程信息的API函数还有GetStartupInfo()和GetProcessShutdownParameters(),可给出进程存活期内的配置详情。

通常,一个进程需要它的运行期环境的信息。

例如API函数GetModuleFileName()和GetCommandLine(),可以给出用在CreateProcess()中的参数以启动应用程序。

在创建应用程序时可使用的另一个API函数是IsDebuggerPresent()。

可利用API函数GetGuiResources()来查看进程的GUI资源。

此函数既可返回指定进程中的打开的GUI对象的数目,也可返回指定进程中打开的USER对象的数目。

进程的其他性能信息可通过GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和GetProcessWorkingSetSize()API得到。

以上这几个API函数都只需要具有PROCESS_QUERY_INFORMATION访问权限的指向所感兴趣进程的句柄。

另一个可用于进程信息查询的API函数是GetProcessVersion()。

此函数只需感兴趣进程的PID(进程标识号)。

本实验程序清单1-6中列出了这一API函数与GetVersionEx()的共同作用,可确定运行进程的系统的版本号。

3.终止进程

所有进程都是以调用ExitProcess()或者TerminateProcess()函数结束的。

但最好使用前者而不要使用后者,因为进程是在完成了它的所有的关闭“职责”之后以正常的终止方式来调用前者的。

而外部进程通常调用后者即突然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为。

TerminateProcess()API函数只要打开带有PROCESS_TERMINATE访问权的进程对象,就可以终止进程,并向系统返回指定的代码。

这是一种“野蛮”的终止进程的方式,但是有时却是需要的。

如果开发人员确实有机会来设计“谋杀”(终止别的进程的进程)和“受害”进程(被终止的进程)时,应该创建一个进程间通讯的内核对象——如一个互斥程序——这样一来,“受害”进程只在等待或周期性地测试它是否应该终止。

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

2)通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。

需要做以下准备:

1)一台运行Windows2000/XPProfessional操作系统的计算机。

2)计算机中需安装VisualC++6.0专业版或企业版。

请回答:

Windows所创建的每个进程都是以调用______CreateProcess()____API函数开始和以调用______ExitProcess()_____或_____TerminateProcess()___API函数终止。

1.创建进程

本实验显示了创建子进程的基本框架。

该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。

登录进入Windows2000/XPProfessional。

在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。

步骤3:

在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序1-5.cpp。

清单1-5创建子进程

//proccreate项目

#include<

windows.h>

iostream>

stdio.h>

//创建传递过来的进程的克隆过程并赋于其ID值

voidStartClone(intnCloneID)

{

//提取用于当前可执行文件的文件名

TCHARszFilename[MAX_PATH];

:

:

GetModuleFileName(NULL,szFilename,MAX_PATH);

//格式化用于子进程的命令行并通知其EXE文件名和克隆ID

TCHARszCmdLine[MAX_PATH];

sprintf(szCmdLine,“\”%s\”%d”,szFilename,nCloneID);

//用于子进程的STARTUPINFO结构

STARTUPINFOsi;

ZeroMemory(reinterpret_cast<

void*>

(&

si),sizeof(si));

si.cb=sizeof(si);

//必须是本结构的大小

//返回的用于子进程的进程信息

PROCESS_INFORMATIONpi;

//利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质

BOOLbCreateOK=:

CreateProcess(

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

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

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

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

FALSE,//不继承句柄

CREATE_NEW_CONSOLE,//使用新的控制台

NULL,//新的环境

NULL,//当前目录

&

si,//启动信息

pi);

//返回的进程信息

//对子进程释放引用

if(bCreateOK)

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

}

intmain(intargc,char*argv[])

//确定进程在列表中的位置

intnClone(0);

if(argc>

1)

//从第二个参数中提取克隆ID

sscanf(argv[1],“%d”,&

nClone);

//显示进程位置

std:

cout<

<

“ProcessID:

“<

GetCurrentProcessId()

<

“,CloneID:

nClone

endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2