windows多进程编程

转载 2013年12月06日 01:44:23
一、进程的概念
进程是是一个正在运行的程序的实例,是系统分配资源的单位(线程是执行的单位),包括内存,打开的文件、处理机、外设等,进程由两部分组成:
1、进程的内核对象:即我们通常所讲的PCB(进程控制块),该结构只能由该内核访问,他是操作系统用来管理进程的一个数据结构,操作系统通过该数据结构来感知和管理进程;它的成员负责维护进程的各种信息,包括进程的状态(创建、就绪、运行、睡眠、挂起、死锁等)、消息队列等;同时也是系统用来存放关于进程的统计信息的地方。
2、进程的地址空间:包含所有可执行模块或DLL模块的代码和数据,以及动态内存分配的空间,如线程堆栈和堆分配的空间。共有4G,0-2G为用户区,2-4G为系统区。
二、进程的创建过程
1、系统创建进程内核对象(PCB进程控制块)。
2、系统为新进程创建虚拟地址空间,帮将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间。
3、系统为新进程的主线程创建一个线程内核对象(TCB线程控制块)。
4、通过执行C/C++运行期启动代码,该主线程开始运行。
注:在Windows环境下,尽量用多线程而不是多进程。
三、与进程相关的API
1、创建进程
BOOL CreateProcess(
PCTSTR psApplicationName, //可执行文件的名字
PTSTR pszCommandLine, //命令行字符串
PSECURITY_ATTRIBUTES psaProcess, //进程对象的安全性
PSECURITY_ATTRIBUTES psaThread, //线程对象的安全性
BOOL bInheritHandles, //句柄可继承性
DWORD fdwCreate, //标识符(优先级)
PVOID pvEnvironment, //指向环境字符串
PCTSTR pszCurDir, //子进程当前目录
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo); //进程线程句柄及ID
2、打开进程
HANDLE OpenProcess(
DWORD dwDesiredAccess, //访问安全属性
BOOL bInheritHandle, //继承属性
DWORD hProcessId); //进程ID
注:获取hPronessId指定的进程的内核对象的句柄
3、终止进程
(1)、主线程的进入点函数返回
(2)、进程自己终止自己
VOID ExitProcess(
UINT fuExitCode); //退出代码
(3)、终止自身进程或其他进程
BOOL TerminateProcess(
HANDLE hProcess, //进程句柄
UINT fuExitCode); //退出代码
三、与进程相关的API
4、获取进程的可执行文件或DLL对应的句柄
HMODULE GetModuleHandle(
PCTSTR pszModule); //模块名称
注:当参数传NULL时获取的是进程的地址空间中可执行文件的基地址。
5、获取与指定窗口关联在一起的一个进程和线程标识符
HANDLE GetWindowThreadProcessId(
HWND hWnd, //窗口句柄
LPDWORD lpdwProcessId); //与该窗口相关的进程ID
6、获取进程的运行时间
Bool GetProcessTimes(
HANDLE hProcess, //进程句柄
PFILETIME pftCreationTime, //创建时间
PFILETIME pftExitTime, //退出时间
PFILETIME pftKernelTime, //内核时间
PFILETIME pftUserTime); //用户时间
注:返回的时间适用于某个进程中的所有线程(甚至已经终止运行的线程)。
7、获取当前进程的一个伪句柄
HANDLE GetCurrentProcess();
注:该函数获取当前进程的伪句柄,通常情况值为-1,只能标识当前进程内核对象,
可以复制,但不可继承。不必调用CloseHandle()函数来关闭这个句柄。
8、将进程的伪句柄转换为实句柄
HANDLE DuplicateHandle(
GetCurrentProcess(),
GetCurrentProcess(),
GetCurrentProcess(),
&hProcess,
0,
FALSE ,
DUPLICATE_SAME_ACCESS);
9、获取当前进程ID
DWORD GetCurrentProcessId();
10、获取进程优先级
DWORD GetPriorityClass(
HANDLE hProcess);
11、修改进程的优先级类
BOOL SetPriorityClass(
HANDLE hProcess, //进程句柄
DWORD fdwPriority); //相对进程优先级
注1:相对线程优先级
实时: REALTIME_PRIORITY_CLASS
高: HIGH_PRIORITY_CLASS
高于正常; ABOVE_NORMAL_PRIORITY_CLASS
正常: NORMAL_PRIORITY_CLASS
低于正常: BELOW_NORMAL_PRIORITY_CLASS
空闲: IDLE_PRIORITY_CLASS
注2:只要拥有进程的句柄和足够的权限,就能够修改系统中运行的任何进程的优
先级类。
12、获取进程句柄计数
BOOL GetProcessHandleCount(
HANDLE hProcess, //句柄
PDWORD pdwHandleCount); //句柄计数
13、获取环境块
DWORD GetEnvironmentVariable(
LPCTSTR lpName, //环境变量的名字
LPTSTR lpValue, //存放返回字符串的缓冲区
DWORD cchValue); //缓冲区的大小
注:返回值为返回字符串的长度,当缓存不足时返回所需字符串的长度
14、设置环境块
BOOL SetEnvironmentVariable(
LPCTSTR lpName, //环境变量的名字
LPCTSTR lpValue); //存放变量值字符串的缓冲区

TCP/IP网络编程 学习笔记_11 --多进程服务器端

并发服务器首先,我们来假设有下面这样两种类型的服务器:第一种,第一个连接请求的受理时间为1s,第50个连接请求的受理时间为50s,第100个连接请求的受理时间为100s。即同时很多客服端连接,需要依次...
  • u010223072
  • u010223072
  • 2015年08月18日 18:40
  • 1797

Windows 多进程模型 摘抄自《windows内核原理与实现》

3.1.1 多进程模型 现代操作系统总是提供可并发执行多个任务的环境,比如,用户可以一边接收电子邮件,一边听音乐,还可以同时跟网络上的朋友聊天。但是,现在主流的计算机只有有限的计算资源,例如只有...
  • KingCat666
  • KingCat666
  • 2015年03月11日 21:56
  • 868

多进程编程总结

进程: 进程的创建: pid_t fork(void); 该函数每次调用都会返回两次,在父进程中返回子进程ID,在子进程中返回0,所以当fork()==0的时候就是子进程了,失败就返回-1 for...
  • hello_bravo_
  • hello_bravo_
  • 2016年09月12日 12:15
  • 2231

并发模型编程中多进程与多进程的选择

在进行并发程序的实现时我们经常面临一个问题,到底是该选择多线程并发模型还是多线程并发模型呢?要在这两者间进行一个选择,首先需要明白两者的优缺点: 多线程的优点 方便高效的内存共享 ...
  • lisongjia123
  • lisongjia123
  • 2016年04月17日 18:56
  • 874

JAVA 多进程 概念 创建 通信

Java语言中多进程的概念、创建;与多进程间的通信方式
  • evan_man
  • evan_man
  • 2016年03月05日 14:00
  • 1915

详解Java中多进程编程的实现

转载地址链接:http://www.jb51.net/article/74430.htm 1.Java进程的创建 Java提供了两种方法用来启动进程或其它程序: (1)使用Runtime的e...
  • cq340321
  • cq340321
  • 2016年11月27日 14:56
  • 3813

多进程并发服务器

我们来考虑有多个客户同时连接一个服务器的情况。在前面的TCP套接字编程的例子中,我们已经看到,服务器程序在接受来自客户端的一个新连接时,会创建出一个新的套接字(已连接套接字),而原先的监听套接字则继续...
  • lihao21
  • lihao21
  • 2017年03月23日 16:40
  • 623

以实例全面讲解PHP中多进程编程的相关函数的使用,php函数

PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。     ...
  • beyond__devil
  • beyond__devil
  • 2016年12月22日 09:22
  • 964

Windows和Linux对决(多进程多线程)

并行程序设计分为共享内存和消息驱动(其实就是分布式内存)两种, 共享内存:所有CPU共内存,所有CPU由一个操作系统控制的,例如Windows和Linux/UNIX,目前流行的多核、多CPU机器...
  • World_2015
  • World_2015
  • 2015年04月07日 14:59
  • 2982

51.[Python]使用multiprocessing进行多进程编程

介绍多进程的基础知识,及使用multiprocessing进行多进程编程的方法,给出了代码示例及github项目地址。...
  • a464057216
  • a464057216
  • 2016年10月04日 21:41
  • 3329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows多进程编程
举报原因:
原因补充:

(最多只允许输入30个字)