进程管理:通过父进程ID获取子进程ID
2017-03-09 10:07
603 查看
为了提高效率,充分利用资源,需要采用多线程,多进程的设计。在网络通信程序中,无论是客户端,还是服务端,功能稍微扩展一下,基本上不可避免的要使用多线程,多进程。
遇到一个需求,需要监测父进程A(Process A) ,创建的子进程B (Process B)。
其中 Process A是主程序Process Main创建的,在创建的时候可以获取Process A 的ID,因此把Process A的ID为父进程ID,来匹配子进程ID
先上代码
有三个关键性的函数 CreateToolhelp32Snapshot() , Process32First() , Process32Next()
1、 CreateToolhelp32Snapshot() 为当前时刻的线程,进程,模块创建一个快照,意味着获取当前所有线程进程的信息
2、Process32First() 获取第一个(列表头部)进程的信息,一般需要和 Process32Next() 配合使用
3、Process32Next()获取下一个进程信息,轮询列表,那么可以获取完整列表
其中LOG是用来输出日志的,调试使用的log类为 Easylogging++ easylogging++
参考文章:通过进程名称获取进程ID、通过子进程ID获取其父进程ID及通过进程ID获取进程名称
感谢 博主 Lemon萫
遇到一个需求,需要监测父进程A(Process A) ,创建的子进程B (Process B)。
其中 Process A是主程序Process Main创建的,在创建的时候可以获取Process A 的ID,因此把Process A的ID为父进程ID,来匹配子进程ID
先上代码
DWORD GetProceeIDfromParentID(DWORD &dwParentProcessId) { DWORD dwProcessID =0; //进行一个进程快照 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hProcessSnap == INVALID_HANDLE_VALUE) { LOG(INFO) << _T("进程快照失败"); return FALSE; } PROCESSENTRY32 pe; TCHAR procID[100] ={0}; string strTemp; pe.dwSize = sizeof(pe); BOOL bProcess = Process32First(hProcessSnap,&pe); strTemp =to_string(dwParentProcessId); LOG(INFO) << _T(" The parent procees ID : ") << dwParentProcessId; while (bProcess) { LOG(INFO) << _T(" The local procees ID major: ") << pe.th32ProcessID; LOG(INFO) << _T(" The parent procees ID major: : ") << pe.th32ParentProcessID; if (pe.th32ParentProcessID == dwParentProcessId) { dwProcessID = pe.th32ProcessID; LOG(INFO) << _T(" The son procees ID : ") << pe.th32ProcessID; LOG(INFO) << _T(" The parent procees ID A : ") << pe.th32ParentProcessID; LOG(INFO) << _T(" The parent procees ID B: ") << dwParentProcessId; } bProcess = Process32Next(hProcessSnap,&pe); } CloseHandle(hProcessSnap); return dwProcessID; }
有三个关键性的函数 CreateToolhelp32Snapshot() , Process32First() , Process32Next()
1、 CreateToolhelp32Snapshot() 为当前时刻的线程,进程,模块创建一个快照,意味着获取当前所有线程进程的信息
2、Process32First() 获取第一个(列表头部)进程的信息,一般需要和 Process32Next() 配合使用
3、Process32Next()获取下一个进程信息,轮询列表,那么可以获取完整列表
其中LOG是用来输出日志的,调试使用的log类为 Easylogging++ easylogging++
参考文章:通过进程名称获取进程ID、通过子进程ID获取其父进程ID及通过进程ID获取进程名称
感谢 博主 Lemon萫
相关文章推荐
- WIN通过子进程获取父进程ID
- 通过进程名称获取进程ID、通过子进程ID获取其父进程ID及通过进程ID获取进程名称
- 通过进程ID获取基地址
- 通过进程名或进程ID获取进程句柄,窗口句柄
- 通过进程ID获取最顶层窗口句柄
- 如何通过进程名获取进程ID
- [linux基础] 通过进程id获取运行程序的程序名称
- 通过Windows进程ID获取窗口句柄
- 从父进程id获取子进程id
- 通过进程ID获取进程主窗口句柄
- 通过进程ID获取进程名
- VC++ 通过进程名或进程ID获取进程句柄
- 通过进程ID获取进程名
- VC下通过进程ID获取进程镜像文件路径的方法及其存在的缺陷
- 通过Docker进程pid获取容器id 推荐
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程
- 通过进程ID获取基地址
- linux通过进程名获取进程id
- 通过进程名获取进程ID
- 通过进程ID获取窗口句柄(微软)