首页  人才招聘  项目交易  BLOG  兴趣小组  图书  资讯  文章  下载  源码  网友作品  刻盘服务

您所在位置：论坛首页 ―
已知一个进程的pid,如何获得某时刻该进程占用的CPU、内存、虚拟内存、句柄数等信息！

打印本页 保存页面

已知一个进程的pid,如何获得某时刻该进程占用的CPU、内存、虚拟内存、句柄数等信息！ 用c或Java 实现。或给出c代码

回复内容

【iu_81】:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#ifndef STATUS_INFO_LENGTH_MISMATCH
#define STATUS_INFO_LENGTH_MISMATCH ((DWORD )0xC0000004L)
#endif

typedef struct
{
FILETIME ftCreationTime;
DWORD dwUnknown1;
DWORD dwStartAddress;
DWORD dwOwningPID;
DWORD dwThreadID;
DWORD dwCurrentPriority;
DWORD dwBasePriority;
DWORD dwContextSwitches;
DWORD dwThreadState;
DWORD dwWaitReason;
DWORD dwUnknown2[5];
} THREADINFO, *PTHREADINFO;

#pragma warning( disable:4200 ) // Zero sized array
typedef struct
{
DWORD dwRelativeOffset; //相对偏移量
DWORD dwThreadCount; //线程数目
DWORD dwUnknown1[6];
FILETIME pfCreateTime;
DWORD dwUnknown2[5];
WCHAR* pszProcessName; //不带路径的名称
DWORD dwBasePriority; //优先级
DWORD dwProcessID; //进程ID
DWORD dwParentProcessID; //父进程ID
DWORD dwHandleCount; //句柄数目
DWORD dwUnknown3;
DWORD dwUnknown4;
DWORD dwVirtualBytesPeak;
DWORD dwTotalVirtualBytes;
DWORD dwPageFaults;
DWORD dwWorkingSetPeak;
DWORD dwTotalWorkingSet; //占用物理内存大小
DWORD dwPeakPagedPoolUsagePages;
DWORD dwTotalPagedPoolUsagePages;
DWORD dwPeakNonPagedPoolUsagePages;
DWORD dwTotalNonPagedPoolUsagePages;
DWORD dwPageFileBytesPeak;
DWORD dwPrivateBytes;
DWORD dwPageFileBytes;
DWORD dwUnknown7[4];
THREADINFO ti[0];
} _PROCESSINFO, *PPROCESSINFO;
#pragma warning( default:4200 )

DWORD (__stdcall *NtQuerySystemInformation )(ULONG,PVOID,ULONG,ULONG);

void ShowPI(void)
{
PBYTE pbyInfo = NULL;
PPROCESSINFO pProcessInfo;
DWORD dwSize = 0x4000;
WCHAR *pname;

if (!NtQuerySystemInformation)
NtQuerySystemInformation=(DWORD (__stdcall*)(ULONG,PVOID,ULONG,ULONG))

GetProcAddress(GetModuleHandle("ntdll.dll"),"NtQuerySystemInformation");

pbyInfo=(PBYTE) malloc(dwSize);

if (pbyInfo)
{
for(;;)
{
memset(pbyInfo,0,dwSize);

if(NtQuerySystemInformation(5,pbyInfo,dwSize,0)!=STATUS_INFO_LENGTH_MISMATCH
)
break;

dwSize += 0x1000;

pbyInfo=(PBYTE) realloc(pbyInfo,dwSize);
}

pProcessInfo = ( PPROCESSINFO ) pbyInfo;

for(;;)
{
pname=pProcessInfo-&gt;pszProcessName;

if (!pname)
pname=(L"Idle");

printf("%-40ls %-12lu %12luK\n",
pname,
pProcessInfo-&gt;dwProcessID,
pProcessInfo-&gt;dwTotalWorkingSet/1024ul
);

if ( pProcessInfo-&gt;dwRelativeOffset == 0 )
break;

pProcessInfo=(PPROCESSINFO)((PBYTE)pProcessInfo+pProcessInfo-&gt;dwRelativeOffset);
}

free( pbyInfo );
}
}

int main(void)
{
ShowPI();
getchar();
return 0;
}

【todototry】:
mark
未公开的api
强

【zhang1007】:
如何得到IO和cpu的使用率那

【YanYin】:
mark

【laiwusheng】:
mark

【jixingzhong】:
http://topic.csdn.net/t/20050510/16/3995670.html

【jixingzhong】:
Performace   counters   &   Toolhelp   API.

广告

最新招聘信息

关于本站 - 网站导航 - 广告服务 - 联系站长 - BUG报告 - 友情链接 - 赞助本站
Copyright©
1999-2007 Programfan.com. All Rights Reserved
论坛制作&维护：Hannibal
Email: [email-masked]
最佳浏览效果：IE6.0+ 或
FireFox 1.5+ 分辨率：1024*768