1.ID与句柄:
句柄:就是进程里的私有表里的一个索引。
不过除了进程中的句柄表,操作系统也有一个句柄表。称为全局句柄表
全局句柄表并不是一个私有的概念,整个操作系统只有一份。全局句柄表至少包含所有的正在运行中的所有的进程和线程。
在创建进程的学习中我们知道,CreateProcess()函数中的最后一个参数lpProcessInformation指向PROCESS_INFORMATION结构体,结构体成员中有
hProcess;//进程句柄
dwProcessId;//进程id
那么两者有什么区别:
hProcess相当于与当前进程中句柄表中的一个索引,只在当前进程中有意义
dwProcessId(pid)相当于全局句柄表中的一个索引,在全局中都有意义。
在图中我们可以看到,进程id和线程id都是全局句柄表中的索引。这个索引值是唯一的但是不是不变的。
解释:唯一:一个索引值只对应一个内核对象。不是不变:比如图中的0进程死了,操作系统就可能会把这个索引给其他内核对象。
下面介绍几个API函数:
TerminateProcess:
BOOL TerminateProcess(
[in] HANDLE hProcess,//要终止的进程的句柄。
[in] UINT uExitCode//终止的原因,可以使用GetExitCodeProcess函数检索进程的退出值。使用GetExitCodeThread函数检索线程的退出值。
使用这个函数我们可以关闭进程。那么假如我们创建进程A和进程B
假设进程A中: