编程中的进程管理.ppt
《编程中的进程管理.ppt》由会员分享,可在线阅读,更多相关《编程中的进程管理.ppt(67页珍藏版)》请在三一文库上搜索。
1、,Windows系统编程实用教程,授课教师: 职务:,第7章 进程编程,课程描述 大多数应用程序都以进程的形式运行,有时还需要在应用程序里运行或结束其他进程。本章将介绍Windows进程编程的方法。,本章知识点,7.1 进程编程基础 7.2 基本进程编程 7.3 进程间通信,7.1 进程编程基础,7.1.1 什么是进程 7.1.2 进程的状态,7.1.1 什么是进程,进程是正在运行的程序的实例。每个运行的Visual C+项目都对应一个进程,每个进程至少包含一个线程,它从main()函数开始执行,直到执行return语句返回,主线程结束,该进程也被从内存中卸载。 进程由如下几个部分组成。 与程
2、序相关联的可执行代码的映像; 内存空间(通常是虚拟内存中的一些区域),其中保存可执行代码、进程的特定数据、用于记录活动例程和其他事件的调用栈、用于保存实时产生的中间计算结果的堆(heap)。 分配给进程的资源的操作系统描述符(比如文件句柄)以及其他数据资源。 安全属性,比如进程的所有者和权限。 处理器的状态,比如寄存器的内容、物理内存地址等。,7.1.2 进程的状态,7.2 基本进程编程,7.2.1 创建进程 7.2.2 枚举系统进程 7.2.3 终止进程,7.2.1 创建进程,在应用程序中可以调用CreateProcess()函数创建一个新进程、运行其他程序,函数原型如下: BOOL WIN
3、API CreateProcess( _in LPCTSTR lpApplicationName, _in_out LPTSTR lpCommandLine, _in LPSECURITY_ATTRIBUTES lpProcessAttributes, _in LPSECURITY_ATTRIBUTES lpThreadAttributes, _in BOOL bInheritHandles, _in DWORD dwCreationFlags, _in LPVOID lpEnvironment, _in LPCTSTR lpCurrentDirectory, _in LPSTARTUPINF
4、O lpStartupInfo, _out LPPROCESS_INFORMATION lpProcessInformation );,参数说明,lpApplicationName,要执行的应用程序名,可以包括结对路径和文件名,通常可以为NULL。 lpCommandLine,要执行的命令行。 lpProcessAttributes,新进程的安全描述符。 lpThreadAttributes,指定主线程的安全描述符。如果为NULL,则使用默认的安全描述符。 bInheritHandles,指示新进程是否从调用进程处继承句柄。 dwCreationFlags,指定附加的、用来控制优先类和进程创建
5、的标志。 lpEnvironment,指向新进程的环境块。如果为NULL,则使用调用CreateProcess()函数的进程的环境。,【例7.1】,调用CreateProcess()函数运行Windows计算器程序,并显示新进程的ID号,及其主线程的Id号,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) char szCommandLine=“calc.exe“; STARTUPINFO si = sizeof(si); PROCESS_INFORMATION pi; si.dwFlags = STAR
6、TF_USESHOWWINDOW; / 指定wShowWindow成员有效 si.wShowWindow = TRUE; / 显示新建进程的主窗口,接上,BOOL bRet = CreateProcess (NULL, / 不在此指定可执行文件的文件名 szCommandLine, / 命令行参数 NULL, / 默认进程安全性 NULL, / 默认进程安全性 FALSE, / 指定当前进程内句柄不可以被子进程继承 CREATE_NEW_CONSOLE, / 为新进程创建一个新的控制台窗口 NULL, / 使用本进程的环境变量 NULL, / 使用本进程的驱动器和目录 ,【例7.1】的运行结果
7、,ShellExecute()函数,HINSTANCE ShellExecute( HWND hwnd, / 指定显示用户界面和错误信息的窗口句柄 LPCTSTR lpOperation, / 对指定文件要执行的操作 LPCTSTR lpFile, / 要执行操作的文件或对象 LPCTSTR lpParameters, / 指定传送给应用程序的参数 LPCTSTR lpDirectory, / 指定执行操作的工作目录 INT nShowCmd / 指定应用程序如何显示。SW_HIDE表示隐藏窗口,SW_MAXIMIZE表示最大化窗口,SW_MINIMIZE表示最小化窗口,SW_SHOW表示在当
8、前位置上以当前大小显示窗口,等等 );,pOperation参数的取值,【例7.2】,【例7.2】调用ShellExecute ()函数访问google网站,代码如下: #include “stdafx.h“ #include “windows.h” int _tmain(int argc, _TCHAR* argv) ShellExecute(NULL, “open“, “http:/“, “ “, “ “, SW_SHOW); return 0; ,7.2.2 枚举系统进程,1使用EnumProcesses()函数 2使用进程快照,1使用EnumProcesses()函数,BOOL WIN
9、API EnumProcesses( _out DWORD* pProcessIds, / 用于接收进程标示符列表的数组 _in DWORD cb, / 数组pProcessIds的大小,单位是字节 _out DWORD* pBytesReturned/ 数组pProcessIds中返回数据的大小,单位是字节 ); 如果函数执行成功,则返回一个非0值;否则返回0。,【例7.3】,调用EnumProcess ()函数枚举当前Windows运行进程的标示符(PID),代码如下: #include “stdafx.h“ #include #include #pragma comment(lib, “
10、Psapi.lib“) int _tmain(int argc, _TCHAR* argv) / 用于接收返回的进程ID信息的数组 DWORD dwProcs1024*2; DWORD dwNeeded; /返回进程数组的大小 /枚举所有进程ID。,接上,if (!EnumProcesses( dwProcs, sizeof(dwProcs), ,【例7.3】的运行结果,2使用进程快照,HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, /指定快照中包含的对象 DWORD th32ProcessID / 指定获取进程快照的PID。如果为
11、0,则获取当前系统进程列表 ); 如果函数执行成功,则返回进程快照的句柄;否则返回INVALID_HANDLE_VALUE。,Process32First()函数,调用Process32First()函数可以从进程快照中获取第1个进程的信息,函数原型如下: BOOL WINAPI Process32First( HANDLE hSnapshot, / 之前调用createtoolhelp32napshot()函数得到的进程快照句柄 LPPROCESSENTRY32 lppe / 包含进程信息的结构体 );,结构体LPPROCESSENTRY32,LANA_ENUM结构体中包含当前逻辑网络适配器
12、的数量。当一个物理网络适配器绑定到一个网络协议时,就对应一个逻辑网络适配器。执行NCB命令NCBENUM可以向LANA_ENUM结构体中填充逻辑网络适配器的个数和逻辑网络适配器编号,此时NCB结构体中的ncb_buffer成员变量指向LANA_ENUM结构体。LANA_ENUM结构体的定义代码如下: typedef struct _LANA_ENUM UCHAR length; UCHAR lanaMAX_LANA; LANA_ENUM, *PLANA_ENUM; 参数说明如下: length,系统中包含的逻辑网络适配器数量。 lanaMAX_LANA,系统中包含的逻辑网络适配器编号数组。,P
13、rocess32Next()函数,调用Process32Next()函数可以从进程快照中获取下一个进程的信息,函数原型如下: BOOL WINAPI Process32Next( HANDLE hSnapshot, 、/ 之前调用createtoolhelp32napshot()函数得到的进程快照句柄 LPPROCESSENTRY32 lppe / 包含进程信息的结构体 ); 如果函数执行成功,则返回TRUE;否则返回FALSE。,【例7.4】,利用进程快照枚举当前Windows运行进程的信息,代码如下: #include “stdafx.h“ #include “windows.h“ #in
14、clude “tlhelp32.h“ int _tmain(int argc, _TCHAR* argv) PROCESSENTRY32 pe; /设置结构体pe的大小 pe.dwSize = sizeof(pe); /获取系统内进程的快照 HANDLE hProcessSnap = :CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hProcessSnap = INVALID_HANDLE_VALUE) printf(“CreateToolhelp32Snapshot error.n“); return -1; ,接上,/遍历进程快照,
15、显示每个进程的信息 BOOL bMore = :Process32First(hProcessSnap, ,4ASTAT结构体,ASTAT结构体用于描述网络适配器的状态和名字信息,定义代码如下: typedef struct ADAPTER_STATUS adapt; NAME_BUFFER NameBuff30; ASTAT; 参数adapt表示网络适配器的状态信息,参数NameBuff表示网络适配器中保存的本地网络名字信息。,【例7.4】的运行结果,7.2.3 终止进程,进程从主函数的第一行代码开始执行,直到主函数结束时终止;也可以强制结束一个进程。当进程被终止时,系统会进行下面的操作:
16、进程中的所有线程都被标记为“终止”状态; 分配给进程的所有资源都会被释放掉; 所有与该进程相关的内核对象都会被关闭; 从内存中移除该进程的代码; 系统设置进程的退出代码; 将该进程对象设置为“受信”(Sigaled)状态。,GetExitCodeProcess()函数,调用GetExitCodeProcess()函数可以获取进程的终止状态,函数原型如下: BOOL WINAPI GetExitCodeProcess( _in HANDLE hProcess, / 进程句柄 _out LPDWORD lpExitCode / 用于接收进程的终止状态 ); 如果函数执行成功,则返回TRUE;否则返
17、回FALSE。当进程在运行中时,其终止状态为STILL_ACTIVE。当进程被终止时,其终止状态变成退出代码。,ExitProcess()函数,在进程中调用ExitProcess()函数终止其自身中所有的线程,函数原型如下: VOID WINAPI ExitProcess( _in UINT uExitCode / 退出代码 );,TerminateProcess()函数,调用TerminateProcess()函数可以终止指定的进程,函数原型如下: BOOL WINAPI TerminateProcess( _in HANDLE hProcess, / 要终止的进程句柄 _in UINT u
18、ExitCode /退出代码 );,7.3 进程间通信,7.3.1 通过自定义消息进行通信 7.3.2 通过管道进行通信 7.3.3 使用互斥体 7.3.4 通过共享内存进行通信,7.3.1 通过自定义消息进行通信,1定义自定义消息的代码 2发送消息 3消息处理函数,1定义自定义消息的代码,为了唯一标识自定义消息,需要为其定义一个消息代码。自定义的消息代码都比WM_USER要大,因为0 WM_USER-1是保留给系统消息使用。可以使用下面的代码定义一个自定义消息WM_MY_MESSAGE: #define WM_MY_MESSAGE (WM_USER+100),2发送消息,调用PostMess
19、age()函数将消息放置到与创建指定窗口的进程相关联的消息队列中,函数不需要等待接收方接受和处理消息就直接返回。函数原型如下: BOOL PostMessage( HWND hWnd, / 接收消息的窗口句柄,使用HWND_BROADCAST表示所有顶层窗口 UINT Msg, / 发送消息的代码 WPARAM wParam, / 指定消息的附加信息 LPARAM lParam / 指定消息的附加信息 );,FindWindow()函数,HWND FindWindow( LPCTSTR lpClassName, /窗口类名,通常为NULL LPCTSTR lpWindowName / 要查找窗
20、口的标题 );,3消息处理函数,在接收端需要设计一个消息处理函数,它的格式如下: LRESULTOnMyMsg(WPARAM wParam, LPARAM lParam) / 处理代码 return 0; 参数wParam和lParam用于接收PostMessage()函数发送消息时指定的参数。,将消息与其处理函数映射起来,定义消息处理函数后还要将消息与其处理函数映射起来。在每个MFC对话框对应的.cpp文件中,都在BEGIN_MESSAGE_MAP宏和END_MESSAGE_MAP()宏之间定义消息与其处理函数映射的,例如: BEGIN_MESSAGE_MAP(CReceiverDlg, C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 中的 进程 管理
链接地址:https://www.31doc.com/p-2258570.html