Windows 操作系统 C/C++ 程序实验
: ____ 王晨璐 ___ 学号: __ 1131000046 ___ 班级: _ 1 班 _____ 院系: ___信息工程学院 ___
2015__年_10_月_26_日
实验二Win dows 2000/xp进程控制
、背景知识
、实验目的 三、工具/准备工作 四、实验容与步骤
请回答:
Windows 所创建的每个进程都是以调用 CreateProcess()API函数开始和以调用 TerminateProcess()或 ExitProcess() API 函数终止。 1.
创建进程
步骤5:编译完成后,单击“ Build ”菜单中的“ Build 2-1 .exe”命令,建立2-1 .exe可执行 文件。
操作能否正常进行?如果不行,则可能的原因是什么? 可以正常运行。
清单2-1展示的是一个简单的使用 CreateProcess() API函数的例子。首先形成简单的命令
行,提供当前的EXE文件的指定文件名和代表生成克隆进程的。 是创建标志参数使用了:
大多数参数都可取缺省值, 但
CREATE NEW CONSOLE
标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标 记。然后该克隆进程的创建方法关闭传递过来的句柄并返回 一进程的主线程暂停一下,以便让用户看到其中的至少一个窗口。
main()函数。在关闭程序之前,每 执行
CreateProcess()函数有10个核心参数?本实验程序中设置的各个参数的值是: a. LPCSTR IpApplivetio nN ame
szFlle name szCmdL ine
NULL NULL
b. LPCSTR lpComma ndLine
c. LPSECURITY_A TTRIBUTES IpProcessAttributes
d. LPSECURITY_ATTRIBUTES lpThreadAttributes e.BOOL bI nheritha ndle f. DWORD dwCreatio nFlage g. LPVOID ipE nvironment h. LPCTSTR lpCurre ntDirectory I. STARTUPINFO lp startup info J. LPPROCESS INFORMA TION
程序运行时屏幕显示的信息是:
False
CREATE NEW CONSOLE NULL NULL &si
lpProcess In formati on &pi
提示:部分程序在 Visual C++环境完成编译、之后,还可以在 Windows 2000/xp的
“命令提示符”状态下尝试执行该程序,看看与在可视化界面下运行的结果有没有不 同?为什么?界面是一样的
2. 正在运行的进程
步骤10:编译完成后,单击“ Build ”菜单中的“ Build 2-2.exe”命令,建立2-2.exe可执 行文件。
操作能否正常进行?如果不行,则可能的原因是什么? 步骤11:在工具栏单击“ Execute Program”
可以正常运行
(执行程序)按钮,执行2- 2.exe程序。
运行结果:
当前PID信息:3692 当前操作系统版本:5.1
系统提示信息: task manager should now now indicate this process is high priority. 清单2-2中的程序向读者表明了如何获得当前的 一程序,系统处理了所有的版本不兼容问题。
接着,程序演示了如何使用 GetVersionEx() API函数来提取OSVERSIONINFOEX 结构。这 一数据块中包括了操作系统的版本信息。其中,
“OS : 5.0 ”表示当前运行的操作系统是:
PID和所需的进程版本信息。为了运行这
wi ndowsXp 5.0
5清单2-2的最后一段程序利用了操作系统的版本信息,
代码接着将当前进程的优先级提高到比正常级别高。
步骤12:单击Ctrl + Alt + Del键,进入“ Windows任务管理器”,在“应用程序”选项卡 中右键单击“ 2-2”任务,在快捷菜单中选择“转到进程”命令。
在“Windows任务管理器”的“进程”选项卡中,与“2-2”任务对应的进程映像名称是 什么? ) : VCSPAWN.EXE
以确认运行的是 Windows 2000/xp。
(为
^4 TinduTir任舞菅理器
型弊逬〕地顶功 查看妁 灵机畑|帮助地J 应用程序进程 性能 脆网
用厂
CPU
crux MSDEV EKE
?k% Acr^R^Z.
&vclio st? exe wps- exe SYSTEM
ClklL mspiistt.. omo
GAU.
QLSJ
内存備用
Z-JV KK K KK.K.KK KKKKKKKKKK^ 1 皐込
常G. T 53 3 ^TSrAWN EXE taskmcr, exe
AciroRd32. ei-ce
GILU UDU cnu.
二-aifis. 出■■wmiprvse. exe cfud e?re
VP1W 0 40 i hdi QKQ vmnet dhcp. ei^ploTeT exe
OEM on i i.oi-dt. ciace ccinimft.色乳电
髦可目h泊喜电 awa
匚h*工七.cx = Is as s = eice
HETWORK 5ER.YI 匚
cnu
£VSTEH SYS TEIfl cnn
盟益出關岂 4, SYSTEM
cnu
NETWORK SBRVirK
SYSTEM
5T5TEM
”二起鵝麗b — □显彌有用戶的逍程Q>
踣束进程电〕
提交更改,<53M /妁4列
进程数:14 CFU 用,□*
右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级, 如设置为“高”后重新运行
2-2.exe程序,屏幕显示有变化吗?为什么?
除了 PID有变化,其他的没有变化
-^1 Tin.d?vs任务官理蛊
文件⑥ 选顶? 查看迪 关机逆)帮助如
诺程数;44
应用程序空程 性能 联阳 用戶
CFU使用-X
映像名称
WSPE1T EXE AcjrpRdSS, e3ce svchosiL- exe wps. esce mspaint_ exe
1用户名
1 cru
口口
内存愷用
2, 8^ K
11, 1&4 K 4, 532 K 65, 196 K 26, 62S K &0 Kl
T
■crw
SYSTEM 00 00
cnu. cnu.
CDAL
00 00
00
=
.vrsr-OH EXE
t askm gr. ex? AcraRd32. ?xa wuniprvs?. end, exe
■wmw&i\ su^thd.勒诜皂 喑mruat dlicp . e□{:pLorer. exe
0JMOILI t or Cl t. eae e orki m 4. q覽 e
—
cnu. 00 3, 3 <1-4
cnu.
KETWBK SERVICE
CDiU
皿 0口
00 OD 00 00 00 00 00 0口 00
STSTEM
SYSTEM cun
SYSTEM
sveh&st- cx? svchostH ?xe 1 sass ?x?
BETWORK SERVICE
SISTEM
SYSTBM
4, 156 7t 200 T貶 7, 404 2f 316 13,012 3, 900 4, 308 4, 792 5, 516
?日加
口显于所有用户的进程尊
结:S3S程
除了改变进程的优先级以外,还可以对正在运行的进程执行几项其他的操作,只要获得其
进程句柄即可。 SetProcessAffi nityMask() API函数允许开发人员将线程映射到处理器上;
而 SetProcessWorkingSet() API
SetProcessPriorityBoost() API 可关闭前台应用程序优先级的提升;
可调节进程可用的非页面
RAM 的容量;还有一个只对当前进程可用的 API函数,即
SetProcessShutdow nParameters(),可告诉系统如何终止该进程。 3.
终止进程
步骤15:编译完成后,单击“ Build ”菜单中的“ Build 2-3.exe ”命令,建立2-3.exe可执行 文件。
操作能否正常进行?如果不行,则可能的原因是什么? 可以正常运行
步骤16:在工具栏单击\Execute Program”按钮,执行 2-3.exe程序。 运行结果:
1) creati ng the child process
表示:创建一个子进程
2) child wait ing for suicide in struct ion
表示:子进程等待父进程给一个自杀命令
3) tell ing child process to quit
表示:子进程自杀
步骤 17:在熟悉清单 2-3 源代码的基础上,利用本实验介绍的 API 函数来尝试改进本程序
( 例如使用 GetProcessTimes() API 函数 ) 并运行。请描述你所做的工作:
2-3 源代码中 std :: cout << \
:: StartClone() 为创建子进程代码。应将其用 CreateProcess()API 函数创建。 std :: cout << \:: CloseHandle(hMutexSuicide)
为结束子进程代码,应将其改为
ExitProcess() 或 TerminateProcess()