用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数

用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数,第1张

VC

获取进程线程

#include

void

EnumProcess(void)

{

HANDLE

hProcessSnap;

HANDLE

hProcess;

PROCESSENTRY32

pe32;

DWORD

dwPriorityClass;

hProcessSnap

=

CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,

0);

if

(hProcessSnap

==

INVALID_HANDLE_VALUE)

{

return;

}

pe32dwSize

=

sizeof(PROCESSENTRY32);

if

(!Process32First(hProcessSnap,

&pe32))

{

CloseHandle(hProcessSnap);

return;

}

do

{

//printf("%s",

pe32szExeFile);

//完整文件名

//printf("%d",

(int)pe32cntThreads);//线程

}while(Process32Next(hProcessSnap,

&pe32));

CloseHandle(hProcessSnap);

}

如果要获取进程句柄

HANDLE

hProcessHandle;

hProcessHandle

=

OpenProcess(0x1F0FFF,

true,

ProcessID);//ProcessID进程ID

这个在控制台,Win32

SDK

,MFC

都可以用的,只不过

SDK

,MFC

输出就

不用

printf

了,只要把获取的内容赋给变量就行了

有些时候需要确实进程内部当前运行着多少线程,那么以下几个方法值得一用。

1根据进程号进行查询:

# pstree -p 进程号

# top -Hp 进程号

2根据进程名字进行查询:

# pstree -p `ps -e | grep server | awk '{print $1}'`

# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l

这里利用了管道和命令替换,

关于命令替换,我也是今天才了解,就是说用``括起来的命令会优先执行,然后以其输出作为其他命令的参数,

上述就是用 ps -e | grep server | awk '{print $1}' 的输出(进程号),作为 pstree -p 的参数

管道和命令替换的区别是:

管道:管道符号"|"左边命令的输出作为右边命令的输入

命令替换:将命令替换符"``"中命令的输出作为其他命令相应位置的参数

以上就是关于用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数全部的内容,包括:用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数、linux下查看一个进程有多少个线程、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9769447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存