取得某个进程的cpu占用率

转自这篇博客:https://www.cnblogs.com/zengqh/archive/2012/05/02/2479813.html

稍作修改,每隔一定时间统计某个进程的cpu占用率并打印,程序可在VS2013上直接运行。

/* percent = (user_time_diff + kernel_time_diff) * 100 / (cpu_num * system_time_diff) */
#include<windows.h>
#include<stdio.h>
#include <pdh.h>
#include <Tlhelp32.h>

#define PROCESS_NAME "VPN.exe"
#define TIME 2000

int main()
{
	// Find the specified Process
	HANDLE hProcess = NULL;
	PROCESSENTRY32 pe = { sizeof(pe) };
	HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	BOOL suc = Process32First(hSnapShot, &pe);

	while (suc)
	{
		hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, pe.th32ProcessID);
		if (hProcess != NULL)
		{
			if (strcmp(pe.szExeFile, PROCESS_NAME) == 0)
			{
				break;
			}
		}
		CloseHandle(hProcess);
		suc = Process32Next(hSnapShot, &pe);
	}
	// Got it
	if (suc)
	{
		ULARGE_INTEGER ulLastSysTime, ulCurSysTime;
		ULARGE_INTEGER ulStart, ulEnd,
			ulLastProcKernelTime, ulLastProcUserTime,
			ulCurProcKernelTime, ulCurProcUserTime;
		ULARGE_INTEGER ulKernelTimeUsed, ulUserTimeUsed, ulSysTimePast;
		SYSTEM_INFO si = { 0 };
		int iCpuUsage = 0;

		GetSystemInfo(&si);
		GetSystemTimeAsFileTime((PFILETIME)&ulLastSysTime);
		GetProcessTimes(hProcess, (PFILETIME)&ulStart, (PFILETIME)&ulEnd,
			(PFILETIME)&ulLastProcKernelTime, (PFILETIME)&ulLastProcUserTime);

		while (1)
		{

			Sleep(TIME);

			GetProcessTimes(hProcess, (PFILETIME)&ulStart, (PFILETIME)&ulEnd,
				(PFILETIME)&ulCurProcKernelTime, (PFILETIME)&ulCurProcUserTime);
			GetSystemTimeAsFileTime((PFILETIME)&ulCurSysTime);

			ulKernelTimeUsed.QuadPart = ulCurProcKernelTime.QuadPart - ulLastProcKernelTime.QuadPart;
			ulUserTimeUsed.QuadPart = ulCurProcUserTime.QuadPart - ulLastProcUserTime.QuadPart;
			ulSysTimePast.QuadPart = ulCurSysTime.QuadPart - ulLastSysTime.QuadPart;

			iCpuUsage = (
				(ulKernelTimeUsed.QuadPart + ulUserTimeUsed.QuadPart) * 100 /
				(float)(si.dwNumberOfProcessors*ulSysTimePast.QuadPart)) + 0.5f
				;

			printf("\rThe Process use %3d%%", iCpuUsage);

			ulLastSysTime = ulCurSysTime;
			ulLastProcKernelTime = ulCurProcKernelTime;
			ulLastProcUserTime = ulCurProcUserTime;
		}
	}

	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,获取指定进程CPU用率c可以使用top命令或ps命令。这两个命令都可以查看系统中运行的进程信息,包括进程CPU用率。 使用top命令获取指定进程CPU用率可以通过以下步骤实现: 1. 打开终端,输入top命令。 2. 按下shift+p,然后输入要查看的进程号或名称,回车。 3. top命令将会显示该进程CPU用率。 使用ps命令获取指定进程CPU用率可以通过以下步骤实现: 1. 打开终端,输入ps命令,加上选项p和进程号或名称。 2. 在选项中加上-o选项,后面输入%cpu或%CPU。 3. 执行该命令,将会显示该进程CPU用率。 以上两个命令都可以实现获取指定进程CPU用率的功能,具体使用哪种方法取决于用户的需求。需要注意的是,这两个命令获取的CPU用率是该进程在系统整体CPU使用率中的比,并不是该进程的实际CPU使用率。如果需要获取该进程的实际CPU使用率,需要使用更为专业的工具或命令。 ### 回答2: 在Linux系统中,我们可以通过多种方式来获取指定进程CPU用率。以下是几个常用的方法: 1. top命令 top命令是一个基于终端的系统监控工具,它能够显示系统中进程的实时信息,包括CPU用率。要获取指定进程CPU用率,可以按下“Shift + P”键,然后输入进程ID或进程名称即可。 2. ps命令 ps命令是另外一个常用的用于获取进程信息的命令。它可以显示所有进程的信息,也可以根据进程ID或进程名称来获取指定进程的信息。要获取指定进程CPU用率,可以使用如下命令: ps -o pid,%cpu,comm -p 进程ID 其中,“%cpu”表示CPU用率,它是ps命令的一个输出参数。 3. pidstat命令 pidstat是一个用于进程性能监测的工具,它可以显示每个进程CPU用率、内存用率等详细信息。要获取指定进程CPU用率,可以使用如下命令: pidstat -p 进程ID 其中,“-p”参数表示指定要监测的进程ID。 4. top -n命令 top命令还可以使用“-n”参数来指定监测次数。这样,我们可以在一定时间内获取指定进程的平均CPU用率。例如,要获取进程ID为123的进程在10秒内的平均CPU用率,可以使用如下命令: top -b -n 10 -d 1 -p 123 |grep "123" 其中,“-b”表示以批处理模式运行top命令,“-n”表示监测次数,“-d”表示监测间隔,“-p”表示要监测的进程ID。最后使用grep命令来过滤输出信息,只保留目标进程的信息。 ### 回答3: 获取指定进程 CPU 用率的方法,在 Linux 系统中有多种实现方式。本文将介绍两种常见的方法: 方法一:使用 top 命令 top 命令可以查看系统中所有进程CPU 用情况,可以通过 top 命令获取指定进程CPU 用率。具体方法如下: 1. 打开终端,输入 top 命令; 2. 按下“Shift + P”组合键,进入按 CPU 用率排序模式; 3. 找到目标进程对应的 PID(进程 ID),使用“k”命令杀掉该进程并记录其 CPU 用率,或记录当前 CPU 用率。 方法二:使用 ps 命令和 awk 命令 ps 命令可以列出系统中所有进程的信息,awk 命令可以对列数据进行处理。使用这两个命令可以获取指定进程CPU 用率。具体方法如下: 1. 打开终端,输入“ps aux | grep [进程名称]”命令,获取目标进程的 PID; 2. 输入“top -p [PID]”命令,实时监控目标进程CPU 用率,并记录需要的信息; 3. 按下“Ctrl + C”组合键退出 top 命令。 需要注意的是,在使用这两种方法获取 CPU 用率时,数据的精确性和稳定性都受到系统负载等因素的影响。为获得更准确的结果,可以多次测量、取平均值,或使用更具专业性的系统监控工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值