实验二 Windows 2000进程控制
操作系统实验二进程管理
操作系统实验二进程管理以下是为大家整理的操作系统实验二进程管理的相关范文,本文关键词为操作系统,实验,进程,管理,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
操作系统实验实验二进程管理学号姓名班级华侨大学电子工程系实验目的1、理解进程的概念,明确进程和程序的区别。
2、理解并发执行的实质。
3、掌握进程的创建、睡眠、撤销等进程控制方法。
实验内容与要求基本要求:用c语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。
实验报告内容1、进程、进程控制块等的基本原理。
进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。
为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下:就绪I/o完成时间片完进程调度I/o请求阻塞执行由于多个程序并发执行,各程序需要轮流使用cpu,当某程序不在cpu上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的内容、堆栈内容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得cpu时,能够正确执行。
为了保存这些内容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块pcb(processcontrolblock)。
进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。
当创建一个进程时,实际上就是为其建立一个进程控制块。
在通常的操作系统中,pcb应包含如下一些信息:①进程标识信息。
为了标识系统中的各个进程,每个进程必须有惟一的标识名或标识数。
②位置信息。
指出进程的程序和数据部分在内存或外存中的物理位置。
操作系统实验报告
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
计算机操作系统实验二Windows任务管理器的进程管理
计算机操作系统实验二Windows任务管理器的进程管理实验二 Windows任务管理器的进程管理一实验目的1)在Windows 任务管理器中对程序进程进行响应的管理操作;2)熟悉操作系统进程管理的概念;3)学习观察操作系统运行的动态性能。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
四实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
当前机器中由你打开,正在运行的应用程序有:1) 实验二Windows 任务管理器的进程管理2) 常州大学—Windows Internet Explore3) 实验一Windows XP 系统管理4)可移动磁盘(H:)Windows“任务管理器”的窗口由_5_个选项卡组成,分别是:1) 应用程序2) 进程3) 性能4)联网当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1) 映像名称2) 用户名3) CPU4) 内存使用1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__24_个进程。
请试着区分一下,其中:系统(SYSTEM) 进程有_14_个,填入表2-1中。
表2-1 实验记录映像名称用户名作用内存使用svchost.exe SYSTEM 用于执行dll文件 4988Kspoolsv.exe SYSTEM 管理所有本地和网络打 5544K印队列及控制所有打印工作lsass.exe SYSTEM 本地安全授权服务1460K services.exe SYSTEM 远程控制木马病毒3816Kwinlogon.exe SYSTEM 管理用户登录和退出5244Kcarss.exe SYSTEM 负责控制windows 12552K smss.exe SYSTEM 系统关键进程 500K CDAC11BA.exe SYSTEM 反复制保护软件1440K server.exe SYSTEM 用于Novell服务监听1196K MATLAB.exe SYSTEM 一种科学计算工程软件46576K MDM.exe SYSTEM 进行本地和远程调试 3532K service.exe SYSTEM 管理启动停止服务 3366K Inetinfo.exe SYSTEM 用于Debug调试除错 10236K system SYSTEM 系统进程 312K服务(SERVICE) 进程有_3_个,填入表2-2中。
操作系统实验二并发与调度
实验二并发与调度一、实验目的在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000线程同步的理解。
通过分析实验程序,了解管理事件对象的API。
了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows 2000 Professional,Visual C++ 6.0专业版或企业版。
三、实验内容和步骤第一部分:互斥体对象本程序中显示的类CCountUpDown使用了一个互斥体来保证对两个线程间单一数值的访问。
每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。
创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源(因而也就是共享资源) 。
1、利用互斥体保护共享资源程序参见实验指导书分析程序的运行结果,可以看到线程(加和减线程) 的交替执行(因为Sleep() API允许Windows切换线程) 。
在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。
1)请描述运行结果(如果运行不成功,则可能的原因是什么?) :2) 根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:_____逆向运行__________第二部分线程通过文件对象发送数据Windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。
这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。
1、演示线程通过文件对象发送数据程序参见实验指导书运行结果(如果运行不成功,则可能的原因是什么?) :阅读和分析程序,请回答问题:1) 程序中启动了多少个单独的读写线程?__________100__________________________________________________________2) 使用了哪个系统API函数来创建线程例程?_________ CreateThread()________________________________3) 文件的读和写操作分别使用了哪个API函数?_______ ReadFile()______ WriteFile()_____________ 每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。
实验一 熟悉Windows2000XP中的进程和线程
实验一熟悉Windows2000/XP中的进程和线程一、实验目的1、熟悉Windows2000/XP中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
二、实验理论基础及教材对应关系1、实验理论基础:(1)操作系统中的进程和线程的概念;(2)进程PCB的各项指标含意;2、本实验内容主要对应于教材第2章。
三、实验内容与步骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。
如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是图标消失机器关机,原因是系统文件。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面图标、开始任务栏消失、得到的结论是任务栏、桌面应用(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:表二:统计线程的各项信息进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异是前者还包含了后者所没有的许多信息。
四、实验材料的提交与成绩评定1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)2、实验源程序一份,请表明题号(电子版)备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。
实验二Windows进程控制
实验步骤与调试过程Windows所创建的每个进程都是以调用CreateProcess()API函数开始和以调用ExitProcess()或TerminateProcess()API函数终止。
1. 创建进程本实验显示了创建子进程的基本框架。
该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。
步骤1:登录进入Windows XP Professional。
步骤2:在“开始”菜单中单击“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:新建Win32 Console Application项目proccreate,再新建C++文件proccreate,将清单2-1复制到文件中。
清单2-1创建子进程清单程序见下面的主要算法和程序清单步骤4:编译,链接,运行。
步骤6:在工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5键,或者单击“Build”菜单中的“Execute proccreate.exe”命令,执行proccreate.exe 程序。
步骤7:按Ctrl + S键可暂停程序的执行,按Ctrl + Pause (Break) 键可终止程序的执行。
清单2-1展示的是一个简单的使用CreateProcess() API函数的例子。
首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。
大多数参数都可取缺省值,但是创建标志参数使用了:CREATE_NEW_CONSOLE, // 使用新的控制台标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。
然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。
在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。
实验2:Windows应用程序基础和进程控制
实验2:Windows应用程序基础和进程控制实验二:Windows进程控制1. 实验目的每个进程都有一个独立的受到保护的地址空间,其他进程不能访问。
一个进程可以包含一个或更多的线程。
进程能够在其内部创建新的、独立的线程,并且管理对象间的通信和同步。
通过对Windows系统编程,进一步熟悉操作系统的基本概念,较好地理解Windows操作系统的系统结构和编程特点。
2. 进程控制Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。
每一进程都以调用ExitProcess()或TerminateProcess() API函数终止。
通常应用程序的框架负责调用ExitProcess()函数。
对C++运行库来说,这一调用发生在应用程序的main()函数返回之后,如果采用C运行库,则调用WinMain()函数。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的生命周期。
2.1 进程控制相关的API基本的Win32进程管理函数是CreateProcess,它可以创建拥有单个线程的进程。
因为进程需要代码,所以有必要指定可执行程序文件名作为CreateProcess调用的一部分。
CreateProcess有10个参数支持其灵活性和强大功能。
该函数并不返回一个HANDLE,而是在一个结构(在调用中指定)中返回表示进程和线程的两个句柄。
2.1.1 创建进程CreateProcess()函数函数格式:BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles, DWORD dwCreationFlags,LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory,LPSTRATUPINFO lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation);参数:(1)lpszApplicationName和lpCommandLine指定了新进程将使用的可执行文件和传递给新进程的命令行字符串。
实验2 熟悉Windows2000
实验二熟悉Windows2000/XP中的进程和线程一、实验目的1、熟悉Windows2000/XP中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
二、实验理论基础及教材对应关系1、实验理论基础:(1)操作系统中的进程和线程的概念;(2)进程PCB的各项指标含意;2、本实验内容主要对应于教材第2章。
三、实验内容与步骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。
如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息3、从桌面启动办公软件“Word ”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:winlogon.exe 、lsass.exe 、csrss.exe 、smss.exe ,试着结束它们,观察到的反应是 , 原因是。
4、在任务管理器中找到进程“explorer.exe ”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化 、得到的结论是 (说出explorer.exe 进程的作用)。
5、运行“spy++.exe ”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe ”的各项信息,并填写下表:表二:统计线程的各项信息进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异是他们的ip 地址相同,前面有+的说明下面其有子窗口。
操作系统实验二
实验二进程创建与撤消一、实验目的1.通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000进程生存过程.2.通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法.二、背景知识1. 创建进程:CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行.下表详细地列出了每个参数的类型和名称.可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关.然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新进程什么行为.经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻暂停.当准备好时,应该使用ResumeThread() API来启动进程.另一个常用的标志是CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口.这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间.接着是CreateProcess() 函数调用所需要的三个通常使用缺省值的参数.第一个参数是lpEnvironment参数,指明为新进程提供的环境;第二个参数是lpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的特殊的当前目录;第三个参数是STARTUPINFO数据结构所必需的,用于在必要时指明新应用程序的主窗口的外观.CreateProcess() 的最后一个参数是用于新进程对象及其主线程的句柄和ID的返回值缓冲区.以PROCESS_INFORMATION结构中返回的句柄调用CloseHandle() API函数是重要的,因为如果不将这些句柄关闭的话,有可能危及主创进程终止之前的任何未释放的资源.2. 终止进程:所有进程都是以调用ExitProcess() 或者TerminateProcess()函数结束的.但最好使用前者而不要使用后者,因为进程是在完成了它的所有的关闭“职责”之后以正常的终止方式来调用前者的.而外部进程通常调用后者即突然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为.T erminateProcess() API函数只要打开带有PROCESS_TERMINATE访问权的进程对象,就可以终止进程,并向系统返回指定的代码.这是一种“野蛮”的终止进程的方式,但是有时却是需要的.如果开发人员确实有机会来设计“谋杀”(终止别的进程的进程) 和“受害”进程(被终止的进程) 时,应该创建一个进程间通讯的内核对象——如一个互斥程序——这样一来,“受害”进程只在等待或周期性地测试它是否应该终止.三、实验内容1.编译运行项目Lab2.1\CntrlOtherPrcss.dsw,观察运行结果,并阅读和分析实验程序.A 、对void CCntrlOtherPrcssDlg::OnStart();的分析:(括号中为变量的类型)在该函数中定义了用于存储进程信息的变量pi(PROCESS_INFORMATION),用于存储开始信息的变脸si(STARTUPINFO),利用CreateProcess()创建进程并将进程的一些信息存储到si与pi中。
操作系统windows 2000实验报告
《操作系统》实验报告专业:年级:学号:提交日期:_______________________实验一:操作系统环境1.1 Windows 2000 系统管理(实验估计时间:60分钟)实验内容与步骤1、计算机管理2、事件查看器3、性能监视4、服务5、数据库(ODBC)为了帮助用户管理和监视系统,Windows 2000提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
步骤1:登录进入Windows 2000 Professional。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1.本地安全策略:查看和修改本地安全策略,诸如用户权限和审计策略。
2.服务:启动和停止由Windows系统提供的各项服务。
3.计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程计算机。
4.事件查看器:显示来自于Window和其他程序的监视与排错信息。
例如,在“系统日志”中包含各种系统组件记录的事件,如使用驱动器失败或加载其他系统组件;“安全日志”中包含有效与无效的登录尝试及与资源使用有关的事件,如删除文件或修改设置等,本地计算机上的安全日志只有本机用户才能查看;“应用程序日志”中包括由应用程序记录的事件等等。
5.数据源(ODBC):即开放数据库连接。
添加、删除以及配置ODBC数据源和驱动程序,通过ODBC可以访问来自多种数据库管理系统的数据。
6.性能:显示系统性能图表以及配置数据日志和警报。
7.组建服务:配置并管理COM+ 应用程序。
1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows 2000管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
步骤3:在“管理工具”窗口中,双击“计算机管理”图标。
“计算机管理”使用的窗口与“Windows资源管理器”相似。
操作系统实验
实验1进程的描述与控制Windows 2000编程(实验估计时间:100分钟)1.1 背景知识Windows 2000 可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。
控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。
不同类型应用程序间的惟一重要区别是其启动方法。
Windows 2000是以NT技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。
当系统运行时,Windows 2000的服务通常要向系统用户提供所需功能。
服务应用程序类型需要ServiceMail()函数,由服务控制管理器(SCM)加以调用。
SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。
其本身负责使应用程序的行为像一个服务,通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。
当C++编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。
产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。
装载器指令告诉系统从哪里装载机器代码。
另一个装载器指令告诉系统从哪里开始执行进程的主线程。
在进行某些设置后,进入开发者提供的main()、Servicemain()或WinMain()函数的低级入口点。
机器代码中包括控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。
Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。
1.2 实验目的通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。
操作系统实验2-Windows基本进程管理
27、基本实验
1)观察任务管理器
步骤一:进入WindowsXP。
步骤二:按Ctrl+Alt+Delete键调出任务管理器。
步骤三:单击“查看”→“选择列”选项,可以看到一些选项,
这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。
{
//将FILETIME结构转化为64位整数
ULONGLONG qwKernel = (((ULONGLONG)ftKernel.dwHighDateTime)
<<32) + ftKernel.dwLowDateTime;
ULONGLONG qwUser = (((ULONGLONG)ftUser.dwHighDateTime)
0); //如果是当前过程,就将其忽略
//初始化过程入口
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize = sizeof(pe);
BOOL bMore = ::Process32First(hSnapshot,&pe);
while(bMore)
&ftUserMode); //在用户模式下消耗的时间
//计算内核模式消耗的时间百分比
DWORD dwPctKernel = ::GetKernelModePercentage(
ftKernelMode, //在内核模式上消耗的时间
ftUserMode); //在用户模式下消耗的时间
//向用户显示进程的某些信息
步骤六:依次输入命令为:
实验二-实验报告(进程管理)
实验二模拟实现进程管理组长:李和林软件1402一、实验目的1.理解进程的概念,明确进程和程序的区别。
2.理解并发执行的实质。
3.掌握进程的创建,睡眠,撤销等进程控制方法。
二、实验内容用C语言,JAVA语言,C++语言编写程序,模拟实现创建新的进程;查看运行进程,换出某个进程;杀死运行进程。
三、实验准备1.进程的定义进程是程序在一个数据集合上的运行过程,是系统资源分配和调度的一个独立单位。
一个程序在不同的数据集合上运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。
2.进程的状态通常情况下,一个进程必须具有就绪,执行和阻塞三种基本情况。
1)就绪状态当进程已分配到除处理器外的所有必要资源后,只要再获得处理器就可以立即执行,这时进程的状态就为就绪状态。
在一个系统里,可以有多个进程同时处于就绪状态,通常把这些就绪进程排成一个或多个队列,称为就绪队列。
2)执行状态处于就绪状态的进程一旦获得处理器,就可以运行,进程状态也就处于执行状态,在单处理器系统中,只能有一个进程处于执行状态,在多处理器系统中,则可能有多个进程处于执行状态3)阻塞状态正在执行的进程因为发生某些事件而暂停运行,这种受阻暂停的状态称为阻塞状态,也可称为等待状态。
通常将处于阻塞状态的进程拍成一个队列,称为阻塞队列,在有些系统中,也会按阻塞原因的不同将阻塞状态的进程排成多个队列。
3.进程状态之间的转换4.进程控制块1)进程控制块的作用进程控制块是进程实体的重要组成部分,主要包含下述四个方面的信息:a)进程标示信息b)说明信息c)现场信息d)管理信息5.进程控制块的组织方式1)链接方式2)索引方式6.进程控制原语1)创建原语2)撤销原语3)阻塞原语4)唤醒原语7.程序代码#include<stdio.h>#include<iostream>using namespace std;void clrscr();void create();void run( );void exchange( );//唤出void kill( );void wakeUp( );//唤醒struct process_type{int pid;int priority;//优先次序int size;int state;//状态char info[10];};struct process_type internalMemory[20];int amount=0,hangUp=0,pid,flag=0;//数目,挂起void main( ){int n;int a;n=1;clrscr( );while(n==1){cout<<"\n********************************************";cout<<"\n* 进程演示系统 *";cout<<"\n********************************************";cout<<"\n 1.创建新的进程 2.查看运行进程 ";cout<<"\n 3.换出某个进程 4.杀死运行进程 ";cout<<"\n 5.唤醒某个进程¨ 6.退出系统 ";cout<<"\n*********************************************"<<endl;cout<<"请选择 ";cin>>a;switch(a){case 1:create( );break;case 2:run( );break;case 3:exchange();//换出break;case 4:kill();break;case 5:wakeUp();break;case 6:exit(0);default:n=0;}}}void create(){ //创建进程int i=0;if (amount>=20){cout<<" 内存已满,请先结束或换出进程";}else{for (i=0;i<20;i++){if (internalMemory[i].state==0){break;}}cout<<"请输入新进程的pid: "<<endl;cin>>internalMemory[ i ].pid;cout<<"请输入新进程的优先级: "<<endl;cin>>internalMemory[amount].priority;cout<<"请输入新进程的大小: "<<endl;cin>>internalMemory[amount].size;cout<<"请输入新进程的内容: "<<endl;cin>>internalMemory[amount].info;internalMemory[i].state=1;amount++;}}void clrscr()//清除内存空间{for (int i=0;i<19;i++){internalMemory[i].pid=0;internalMemory[i].priority=0;internalMemory[i].size=0;internalMemory[i].state=0;}amount=0;}void run(){for (int i=0;i<20;i++){if (internalMemory[i].state==1){cout<<"当前内存中的进程:\n"<<endl;cout<<"当前运行的进程: ";cout<<internalMemory[i].pid<<endl;cout<<"当前运行进程的优先级: ";cout<<internalMemory[i].priority<<endl;cout<<"当前运行进程占用的空间大小: ";cout<<internalMemory[i].size;}}}void exchange( ){//唤出优先级最小的进程if (!amount){cout<<"当前没有运行进程\n";return;}cout<<"\n输入换出进程的ID值: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){if (internalMemory[i].state==1){internalMemory[i].state=2;hangUp++;cout<<"\n已经成功换出进程\n";}else if (internalMemory[i].state==0){cout<<"\n要换出的进程不存在";}else{cout<<"\n要换出的进程已被挂起\n";}flag=1;break;}}if (flag==0){cout<<"\n要换出的进程不存在";}}void kill( ){if (!amount){cout<<"当前没有运行进程\n";return;}cout<<"请输入要杀死的进程: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){if (internalMemory[i].state==1){internalMemory[i].state=0;amount--;cout<<"此进程被杀死"<<pid;}else if (internalMemory[i].state==0){cout<<"\n要杀死的进程不存在\n";}else{cout<<"\n要杀死的进程已被挂起\n";}flag=1;break;}}if (!flag){cout<<"\n要杀死的进程不存在\n";}}void wakeUp(){if (!amount){cout<<"当前没有运行进程"<<endl;return;}if (!hangUp){cout<<"当前没有挂起进程";return;}cout<<"请输入pid: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){flag=0;if (internalMemory[i].state==2){internalMemory[i].state=1;hangUp--;cout<<"已经成功唤醒进程\n";}else if (internalMemory[i].state==0){cout<<"\n要换醒的进程不存在\n";}else{cout<<"\n要唤醒的进程已被挂起\n";}break;}}if (flag){cout<<"\n要唤醒的进程已被挂起\n"<<endl;}}8.实现的结果。
(完整word版)实验2-进程控制与通信管理(word文档良心出品)
年级11级专业计算机科学与技术班级五班组号12组实验室9#205 日期2014/05/17 实验名称实验二、进程控制与通信管理实验内容分项内容实验级别1、Linux 系统常用进程管理命令的使用操作系统观察级2、Linux 系统常用进程创建与管理的系统调用原码阅读与系统编程级3、Windows平台常用进线程控制API 原码阅读与系统编程级4、进程同步与互斥控制(读者写者、一家人吃苹果桔子、哲学家吃饭)码阅读与系统编程级5、简单进程通信(管道、消息缓冲、邮件槽等)(原码阅读与系统编程级)小组成员姓名学号组内分工自我评分教师评分独立完成实验二(1)良好独立完成实验二(2)良好独立完成实验二(3)良好独立完成实验二(4)良好独立完成实验二(5)良好小组成绩评定教师签名:年月日实验分项1 1、Linux 系统常用进程管理命令的使用2、Linux 系统常用进程创建与管理的系统调用3、Windows平台常用进线程控制API 4、进程同步与互斥控制5、简单进程通信实验目的一、实验目的:1、加深对进程概念的理解,明确进程和程序的区别。
2、进一步认识并发执行的实质。
3、分析进程争用资源的现象,学习解决进程互斥的方法。
实验要求具体题目:进程创建、进程控制系统平台:Linux/Windows操作系统实验原理步骤(算法流程)二、实验原理1.Linux 系统常用进程管理命令(1)at命令:定时运行命令让系统在两天后的17:30执行文件data中指定的作业,使用命令:#at -f data 15:30 +2 days(2)bg命令后台运行命令如果要将一个大目录的文件进行排序后,将结果输入到一个文件中,可以使用命令:#du -a / | sort -rn > /tmp/du.sorted(3)Fg挂起程序使用fg命令时,要加入后台任务号码,如果不加任何号码,则所变动的均是当前任务。
#du -a / | sort -rn > /tmp/du.sorted &[1] 237#fg 1(4)Jobs显示后台程序先把两个进程放在系统后台运行,然后使用jobs命令查看后台任务的执行情况:#du -a /etc > user.data &[1] 233# find / -name core -type f -ls > core.data &[2] 234#jobs -l[1] + 237 Running du -a /etc > user.data[2] - 238 Running find / -name core -type f -ls >core.data(5)kill命令杀掉进程命令执行过程如果出错,用户可用"kill"来结束任务。
初探windows2000系统进程管理
初探windows2000系统进程管理Ξ□胡秀娟(广西银行学校算机教学部,广西南宁530007)[摘 要] 比较分析了windows2000与其它微软操作系统的优劣,并从防范病毒或恶意软件攻击的角度分析了如何更好地管理windows2000的进程。
[关键词] wind ows2000;进程;管理[中图分类号] TP316 [文献标识码] A [文章编号] 1002-5227(2008)S -0256-03 当前计算机所使用的操作系统有微软Mi 2crosoft 和苹果Mac ,主流使用的是微软的操作系统,主要有wi ndows98、wi ndowsN T 、windowsSE 、windowsME 、windows2000、wi ndowsXP 、win 2dows2003等。
wi ndows98、windowsSE 、windowsME 可归为一类,典型代表是windows98,它短小精悍,对硬件条件要求不高,与各硬件插件和应用软件的兼容性较好。
windowsSE 、windowsME 是win 2dows98的改进版本,提高了对硬件的要求,但功能并没有多大增强,仍然存在容易蓝屏死机、系统崩溃的缺点;wi ndows2003、wi ndowsNT 是服务器版本,为保证其稳定性对软硬件要求较为苛刻,一般用户没有必要使用;windows2000、win 2dowsXP 是应用的主流,windows2000和win 2dowsXP 是同一个内核,都很稳定。
二者相比:windowsXP 是傻瓜操作系统,懒人的最爱,它界面美观,集成的软件和功能相当强大,能识别并自动安装几乎所有的硬件设备,但wi ndowsXP 是windows2000的改进版本,对硬件资源的需求量和要求大大的提高了,但是还存增加的实用功能不多等问题。
而windows2000最实用,不但稳定、对硬件资源要求较低外,其占用系统资源比windowsXP 少,可以免费升级。
Windows操作系统实验二实验报告
Windows操作系统C/C++ 程序实验姓名:_____王晨璐_____学号:____1131000046____班级:____1班_____院系:___信息工程学院_____2015__年_10_月_26_日实验二Windows 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 lpApplivetionName szFllenameb. LPCSTR lpCommandLine szCmdLinec. LPSECURITY_ATTRIBUTES lpProcessAttributes NULLd. LPSECURITY_ATTRIBUTES lpThreadAttributes NULLe.BOOL bInherithandle Falsef. DWORD dwCreationFlage CREATE_NEW_CONSOLEg. LPVOID ipEnvironment NULLh. LPCTSTR lpCurrentDirectory NULLI. STARTUPINFO lp startupinfo &siJ. LPPROCESS_INFORMATION lpProcessInformation &pi 程序运行时屏幕显示的信息是:提示:部分程序在Visual C++环境完成编译、链接之后,还可以在Windows 2000/xp的“命令提示符”状态下尝试执行该程序,看看与在可视化界面下运行的结果有没有不同?为什么?界面是一样的2. 正在运行的进程步骤10:编译完成后,单击“Build”菜单中的“Build 2-2.exe”命令,建立2-2.exe可执行文件。
操作系统实验
实验二 Windows“任务管理器”的进程管理背景知识实验目的工具/准备工作实验内容与步骤背景知识Windows 2000的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。
2) “进程”选项卡显示正在运行的进程信息。
例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。
3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。
实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows 2000 Professional操作系统的计算机。
实验内容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
在本次实验中,你使用的操作系统版本是:XP当前机器中由你打开,正在运行的应用程序有:1)实验二.doc—Microsoft Word2)hao123_上网从这里开始3)http://192.168.22.222/qdxt/index.aspWindows“任务管理器”的窗口由___5___个选项卡组成,分别是:1) 应用程序2) 进程3) 性能4) 联网5) 用户当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1)影像名称2)用户名3)CPU4)内存使用1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了___45___个进程。
操作系统windows2000实验报告
《操作系统》实验报告专业:年级:学号:提交日期:_______________________实验一:操作系统环境1.1 Windows 2000 系统管理(实验估计时间:60分钟)实验内容与步骤1、计算机管理2、事件查看器3、性能监视4、服务5、数据库(ODBC)为了帮助用户管理和监视系统,Windows 2000提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。
步骤1:登录进入Windows 2000 Professional。
步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。
在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:1.本地安全策略:查看和修改本地安全策略,诸如用户权限和审计策略。
2.服务:启动和停止由Windows系统提供的各项服务。
3.计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程计算机。
4.事件查看器:显示来自于Window和其他程序的监视与排错信息。
例如,在“系统日志”中包含各种系统组件记录的事件,如使用驱动器失败或加载其他系统组件;“安全日志”中包含有效与无效的登录尝试及与资源使用有关的事件,如删除文件或修改设置等,本地计算机上的安全日志只有本机用户才能查看;“应用程序日志”中包括由应用程序记录的事件等等。
5.数据源(ODBC):即开放数据库连接。
添加、删除以及配置ODBC数据源和驱动程序,通过ODBC可以访问来自多种数据库管理系统的数据。
6.性能:显示系统性能图表以及配置数据日志和警报。
7.组建服务:配置并管理COM+ 应用程序。
1. 计算机管理使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows 2000管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。
步骤3:在“管理工具”窗口中,双击“计算机管理”图标。
“计算机管理”使用的窗口与“Windows资源管理器”相似。
【VIP专享】实验一 和实验二
1、启动操作系统自带的任务管理器: 方法:直接按组合键 Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运
行”,并输入“taskmgr.exe”。如下图所示:
6.培养学生观察、思考、对比及分析综合的能力。过程与方法1.通过观察蚯蚓教的学实难验点,线培形养动观物察和能环力节和动实物验的能主力要;特2征.通。过教对学观方察法到与的教现学象手分段析观与察讨法论、,实对验线法形、动分物组和讨环论节法动教特学征准的备概多括媒,体继课续件培、养活分蚯析蚓、、归硬纳纸、板综、合平的面思玻维璃能、力镊。子情、感烧态杯度、价水值教观1和.通过学理解的蛔1虫.过观适1、察于程3观阅 六蛔寄.内列察读 、虫生出蚯材 让标容生3根常蚓料 学本教活.了 据见身: 生,师的2、解 问的体巩鸟 总看活形作 用蛔 题线的固类 结雌动态业 手虫 自形练与 本雄学、三: 摸对 学动状习人 节蛔生结4、、收 一人 后物和同类 课虫活构请一蚯集 摸体 回并颜步关 重的动、学、蚓鸟 蚯的 答归色学系 点形教生生让在类 蚓危 问纳。习从 并状学理列学平的害 题线蚯四线人 归、意特出四生面体以形蚓、形类 纳大图点常、五观玻存 表及动的鸟请动文 本小引以见引、察璃现 ,预物身类 3学物明 节有言及的、导巩蚯上状 是防的体之生和历 课什根蚯环怎学固蚓和, 干感主是所列环史 学么据蚓节二样生练引牛鸟 燥染要否以举节揭 到不上适动、区回习导皮类 还的特分分蚯动晓 的同节于物让分答。学纸减 是方征节布蚓物起 一,课穴并学蚯课生上少 湿法。?广的教, 些体所居归在生蚓前回运的 润;4泛益学鸟色生纳.靠物完的问答动原 的4蛔,处目类 习和活环.近在成前题蚯的因 ?了虫以。标就 生体的节身其实端并蚓快及 触解寄上知同 物表内特动体结验和总利的慢我 摸蚯生适识人 学有容点物前构并后结用生一国 蚯蚓在于与类 的什,的端中思端线问活样的 蚓人飞技有 基么引进主的的考?形题环吗十 体生行能着 本特出要几变以动,境?大 节活的1密 方征本“特节化下物.让并为珍 近习会形理切 法。课生征有以问的小学引什稀 腹性态解的 。2课物。什游题主.结生出么鸟 面和起结蛔关观题体么戏:要利明蚯?类 处适哪构虫系察:的特的特用确蚓等 ,于些特适。蛔章形殊形征板,这资 是穴疾点于可虫我态结式。书生种料 光居病是寄的们结构,五小物典, 滑生?重生鸟内学构,学、结的型以 还活5要生类部习与.其习巩鸟结的爱 是如原活生结了功颜消固类构线鸟 粗形何因的存构腔能色化练适特形护 糙态预之结的,肠相是系习于点动鸟 ?、防一构现你动适否统。飞都物为结蛔。和状认物应与的行是。主构虫课生却为和”其结的与题、病本理不蛔扁的他构特环以生?8特乐虫形观部特8征境小理三页点观的动位点梳相组等、这;,哪物教相,理适为方引些2鸟,育同师.知应单面导鸟掌类结了;?生识的位学你握日构解2互.。办特生认线益特了通动手征观识形减点它过,抄;察吗动少是们理生报5蛔?物,与的解.参一了虫它和有寄主蛔与份解结们环些生要虫其。蚯构都节已生特对中爱蚓。会动经活征人培鸟与飞物灭相。类养护人吗的绝适这造兴鸟类?主或应节成趣的为要濒的课情关什特临?就危感系么征灭来害教;?;绝学,育,习使。我比学们它生可们理以更解做高养些等成什的良么两好。类卫动生物习。惯根的据重学要生意回义答;的3.情通况过,了给解出蚯课蚓课与题人。类回的答关:系线,形进动行物生和命环科节学动价环值节观动的物教一育、。根教据学蛔重虫点病1.引蛔出虫蛔适虫于这寄种生典生型活的线结形构动和物生。理二特、点设;置2.问蚯题蚓让的学生生活思习考性预和习适。于穴居生活的形态、结构、生理等方面的特征;3.线形动物和环节动物的主要特征。
进程控制描述与控制实验报告
3.1 Windows“任务管理器”的进程管理(实验估计时间:60分钟)背景知识实验目的工具/准备工作实验内容与步骤背景知识Windows 2000的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。
2) “进程”选项卡显示正在运行的进程信息。
例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。
3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。
实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows 2000 Professional操作系统的计算机。
实验内容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
在本次实验中,你使用的操作系统版本是:_______Windows_XP______________________当前机器中由你打开,正在运行的应用程序有:1) _______201005015401邓玲玉________2) ___________实验一-Microsoft Word___3) _________操作系统电子_____________4) ___________百度首页________5) ____________ftp://172.16.20.168_______Windows“任务管理器”的窗口由____4__个选项卡组成,分别是:1) _______应用程序______________2) _进程__________________3) ______ 性能___________________4) ________联网__________________当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__40___个进程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 必须是本结构的大小
// 利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质 BOOL bCreateOK = :: CreateProcess( szFilename, szCmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) ; // 对子进程释放引用 if (bCreateOK) { :: CloseHandle(pi.hProcess) ; :: CloseHandle(pi.hThread) ; } } int main(int argc, char* argv[] ) { // 确定进程在列表中的位置 int nClone(0) ; if (argc > 1) { // 从第二个参数中提取克隆ID :: sscanf(argv[1] , “%d” , &nClone) ; } // 显示进程位置 std :: cout << “Process ID: “ << :: GetCurrentProcessId() << “, Clone ID: “ << nClone << std :: endl; // 检查是否有创建子进程的需要 const int c_nCloneMax = 25; if (nClone < C_nCloneMax) { // 发送新进程的命令行和克隆号 StartClone(++nClone) ; } // 在终止之前暂停一下 (l/2秒) :: Sleep(500) ; return 0; }
通常,一个进程需要它的运行期环境的信息。 例如API函数GetModuleFileName() 和 GetCommandLine(),可以给出用在 CreateProcess() 中的参数以启动应用程序。 在创建应用程序时可使用的另一个API函数是 IsDebuggerPresent() 。
CreateProcess() 的最后一个参数是用于新进程 对象及其主线程的句柄和ID的返回值缓冲区。 以PROCESS_INFORMATION结构中返回的句 柄调用CloseHandle() API函数是重要的,因为 如果不将这些句柄关闭的话,有可能危及主创 进程终止之前的任何未释放的资源。
2、正在运行的进程 如果一个进程拥有至少一个执行线程,则为正 在系统中运行的进程。通常,这种进程使用主 线程来指示它的存在。当主线程结束时,调用 ExitProcess() API函数,通知系统终止它所拥 有的所有正在运行、准备运行或正在挂起的其 他线程。当进程正在运行时,可以查看它的许 多特性,其中少数特性也允许加以修改。
返回进程的主线程的句柄的安全属性 一种标志,告诉系统允许新进程继承创建者进程的 句柄 特殊的创建标志 (如CREATE_SUSPENDED) 的位 标记 向新进程发送的一套环境变量;如为null值则发送 调用者环境 新进程的启动目录 STARTUPINFO结构,包括新进程的输入和输出配 置的详情 调用的结果块;发送新应用程序的进程和主线程的 句柄和ID
2、正在运行的进程 用于进程信息查询的API函数 GetProcessVersion() 与GetVersionEx() 的共 同作用,可确定运行进程的操作系统的版本号。
// version项目 # include <windows.h> # include <iostream> // 利用进程和操作系统的版本信息的简单示例 void main() { // 提取这个进程的ID号 DWORD dwIdThis = :: GetCurrentProcessId() ; // 获得这一进程和报告所需的版本,也可以发送0以便指明这一进程 DWORD dwVerReq = :: GetProcessVersion(dwIdThis) ; WORD wMajorReq = (WORD) dwVerReq > 16) ; WORD wMinorReq = (WORD) dwVerReq & 0xffff) ; std :: cout << “Process ID: “ << dwIdThis << “, requires OS: “ << wMajorReq << wMinorReq << std :: endl ; // 设置版本信息的数据结构,以便保存操作系统的版本信息 OSVERSIONINFOEX osvix; :: ZeroMemory(&osvix, sizeof(osvix) ) ; osvix.dwOSVersionInfoSize = sizeof(osvix) ; // 提取版本信息和报告 :: GetVersionEx(reinterpret_cast < LPOSVERSIONINFO > (&osvix) ) ; std :: cout << “Running on OS: “ << osvix.dwMajorVersion << “.” << osvix.dwMinorVersion << std :: endl;
可以指定第一个参数,即应用程序的名称,其 中包括相对于当前进程的当前目录的全路径或 者利用搜索方法找到的路径; lpCommandLine参数允许调用者向新应用程 序发送数据; 接下来的三个参数与进程和它的主线程以及返 回的指向该对象的句柄的安全性有关。
标志参数,用以在dwCreationFlags参数中指 明系统应该给予新进程什么行为。经常使用的 标志是CREATE_SUSPNDED,告诉主线程立 刻暂停。当准备好时,应该使用 ResumeThread() API来启动进程。另一个常 用的标志是CREATE_NEW_CONSOLE,告 诉新进程启动自己的控制台窗口,而不是利用 父窗口。这一参数还允许设置进程的优先级, 用以向系统指明,相对于系统中所有其他的活 动进程来说,给此进程多少CPU时间。
// proccreate项目 # include <windows.h> # include <iostream.h> # include <stdio.h> // 创建传递过来的进程的克隆过程并赋于其ID值 void StartClone(int nCloneID) { // 提取用于当前可执行文件的文件名 TCHAR szFilename[MAX_PATH] ; :: GetModuleFileName(NULL, szFilename, MAX_PATH) ; // 格式化用于子进程的命令行并通知其EXE文件名和克隆ID TCHAR szCmdLine[MAX_PATH] ; :: sprintf(szCmdLine, “\”%s\” %d”, szFilename, nCloneID) ; // 用于子进程的STARTUPINFO结构 STARTUPINFO si; :: ZeroMemory(reinterpret_cast <void*> (&si) , sizeof(si) ) ; si.cb = sizeof(si) ; // 返回的用于子进程的进程信息 PROCESS_INFORMATION pi;
接着是CreateProcess() 函数调用所需要的三 个通常使用缺省值的参数。第一个参数是 lpEnvironment参数,指明为新进程提供的环 境; 第二个参数是lpCurrentDirectory,可用于向主 创进程发送与缺省目录不同的新进程使用的特 殊的当前目录; 第三个参数是STARTUPINFO数据结构所必需 的,用于在必要时指明新应用程序的主窗口的 外观。
另一个可用于进程信息查询的API函数是 GetProcessVersion() 。此函数只需感兴趣进 程的PID (进程标识号) 。本实验程序清单中列 出了这一API函数与GetVersionEx() 的共同作 用,可确定运行进程的系统的版本号。
3、终止进程 所有进程都是以调用ExitProcess() 或者 TerminateProcess() 函数结束的。但最好使用 前者而不要使用后者,因为进程是在完成了它 的所有的关闭“职责”之后以正常的终止方式 来调用前者的。而外部进程通常调用后者即突 然终止进程的进行,由于关闭时的途径不太正s 2000进程 控制
一、背景知识
Windows所创建的每个进程都从调用 CreateProcess() API函数开始,该函数的任务 是在对象管理器子系统内初始化进程对象。 每一进程都以调用ExitProcess() 或 TerminateProcess() API函数终止。通常应用程 序的框架负责调用 ExitProcess() 函数。 对于C++运行库来说,这一调用发生在应用程 序的main() 函数返回之后。
可利用API函数GetGuiResources() 来查看进程的GUI 资源。此函数既可返回指定进程中的打开的GUI对象的 数目,也可返回指定进程中打开的USER对象的数目。 进程的其他性能信息可通过GetProcessIoCounters()、 GetProcessPriorityBoost() 、GetProcessTimes() 和 GetProcessWorkingSetSize() API得到。以上这几个 API函数都只需要具有 PROCESS_QUERY_INFORMATION访问权限的指向 所感兴趣进程的句柄。
TerminateProcess() API函数只要打开带有 PROCESS_TERMINATE访问权限的进程对 象,就可以终止进程,并向系统返回指定的代 码。这是一种“野蛮”的终止进程的方式,但 是有时却是需要的。 如果开发人员确实有机会来设计“谋杀”(终 止别的进程的进程) 和“受害”进程 (被终止 的进程) 时,应该创建一个进程间通讯的内核 对象——如一个互斥程序——这样一来,“受 害”进程只在等待或周期性地测试它是否应该 终止。