进程

本文详细介绍了Windows环境下进程的创建、管理和终止方法,包括使用CreateProcess函数启动进程、获取进程句柄和ID,以及进程终止的不同方式。

进程构成

 

  • 内核对象。操作系统用来管理进程
  • 地址空间。包含所有可执行文件和DLL模块代码。

进程实例句柄

 

句柄可以用HINSTANCE和HMODULE来表示,两者一致。

 

获取加载基地址

GetModuleHandle(PCTSTR psmodule);

返回可执行文件加载的基地址。

如果向其传递NULL值,会返回进程地址空间的可执行文件的基地址,即使GetModuleHandle代码在一个DLL文件中返回值仍是可执行文件的基地址而不是DLL文件的基地址。

 

 

创建进程:

 

lpApplicationName与lpCommandLine结合一起使用。第一个参数值要执行的文件名,第二个参数为参数命令行。

 

如果第一个参数为空,那么在第二个参数要指明要运行的程序,可以加空格再加命令行。

 

lpProcessAttributes:

 指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

 


lpThreadAttributes

  指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpThreadAttributes参数为空(NULL),那么句柄不能被继承。

.lpStartupInfo:

  指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。

.lpProcessInformation:

  指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。

 

 

 

 

 

创建进程实例:

 

 

 

获取进程线程ID

 

GetCurrentProcessid

GetCurrentThreadid

GetProcessid

GetThreadid

终止进程

1、主线程入口返回。保证所有资源被正确清理,在入口返回处会显式调用ExitProcess来终止进程。

2、调用ExitProcess(0)来终止。调用该函数会导致进程当场终止运行,没有执行清理工作。(避免这种方式)

3、调用TerminateProcess(handle hprocess,UNIT code)函数。可以终止自己或其他进程。虽然进程没有办法进行清理工作,但是系统会释放所有资源,不会泄露任何东西。(避免这种方式)

4、所有线程都自然死亡。(几乎不会发生)

 

子进程

 为了协助处理部分其他工作,但是又不错误修改我们的数据,我们可以创建一个新进程来执行工作。新进程允许访问父进程的相关数据。共享数据最方便的方式之一是使用内存映射文件。

WaitForSingleObject函数的调用将暂停执行父进程的线程,直到子进程终止。

 

独立子进程

为了与父进程独立开来,在创建进程后执行:

closeHandle(pi.hthread);

closeHandle(pi.hProcess);

 


提高进程权限

ShellExcuteEx;

具体见核心编程5版P111。

 

进程列举:

 

在C++中,对于wchar类型的输出。可以用wcout;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值