当前位置: 首页 > news >正文

做联盟 网站 跳转 防止垃圾外链seo引擎优化是什

做联盟 网站 跳转 防止垃圾外链,seo引擎优化是什,沈阳免费建网站,wordpress插件下载运维监控程序中经常需要根据一个进程号pid去监控实时的cpu和内存占用&#xff0c;以下整理了一个C实现的简单例子&#xff0c;并封装为方便跨平台调用的函数 代码 #include <iostream> #include <thread> #include <chrono> #include <string.h>#ifd…

运维监控程序中经常需要根据一个进程号pid去监控实时的cpu和内存占用,以下整理了一个C++实现的简单例子,并封装为方便跨平台调用的函数

代码

#include <iostream>
#include <thread>
#include <chrono>
#include <string.h>#ifdef WIN32
#include <windows.h>  
#include <psapi.h>  
//#include <tlhelp32.h>
#include <direct.h>
#include <process.h>
#else
#include <sys/stat.h>
#include <sys/sysinfo.h>
#include <sys/time.h>
#include <unistd.h>
#endif// get current process pid
inline int GetCurrentPid()
{return getpid();
}// get specific process cpu occupation ratio by pid
#ifdef WIN32
// 
static uint64_t convert_time_format(const FILETIME* ftime)
{LARGE_INTEGER li;li.LowPart = ftime->dwLowDateTime;li.HighPart = ftime->dwHighDateTime;return li.QuadPart;
}
#else
// FIXME: can also get cpu and mem status from popen cmd
// the info line num in /proc/{pid}/status file
#define VMRSS_LINE 22
#define PROCESS_ITEM 14static const char* get_items(const char* buffer, unsigned int item)
{// read from buffer by offsetconst char* p = buffer;int len = strlen(buffer);int count = 0;for (int i = 0; i < len; i++){if (' ' == *p){count++;if (count == item - 1){p++;break;}}p++;}return p;
}static inline unsigned long get_cpu_total_occupy()
{// get total cpu use time// different mode cpu occupy timeunsigned long user_time;unsigned long nice_time;unsigned long system_time;unsigned long idle_time;FILE* fd;char buff[1024] = { 0 };fd = fopen("/proc/stat", "r");if (nullptr == fd)return 0;fgets(buff, sizeof(buff), fd);char name[64] = { 0 };sscanf(buff, "%s %ld %ld %ld %ld", name, &user_time, &nice_time, &system_time, &idle_time);fclose(fd);return (user_time + nice_time + system_time + idle_time);
}static inline unsigned long get_cpu_proc_occupy(int pid)
{// get specific pid cpu use timeunsigned int tmp_pid;unsigned long utime;  // user timeunsigned long stime;  // kernel timeunsigned long cutime; // all user timeunsigned long cstime; // all dead timechar file_name[64] = { 0 };FILE* fd;char line_buff[1024] = { 0 };sprintf(file_name, "/proc/%d/stat", pid);fd = fopen(file_name, "r");if (nullptr == fd)return 0;fgets(line_buff, sizeof(line_buff), fd);sscanf(line_buff, "%u", &tmp_pid);const char* q = get_items(line_buff, PROCESS_ITEM);sscanf(q, "%ld %ld %ld %ld", &utime, &stime, &cutime, &cstime);fclose(fd);return (utime + stime + cutime + cstime);
}
#endifinline float GetCpuUsageRatio(int pid)
{
#ifdef WIN32static int64_t last_time = 0;static int64_t last_system_time = 0;FILETIME now;FILETIME creation_time;FILETIME exit_time;FILETIME kernel_time;FILETIME user_time;int64_t system_time;int64_t time;int64_t system_time_delta;int64_t time_delta;// get cpu numSYSTEM_INFO info;GetSystemInfo(&info);int cpu_num = info.dwNumberOfProcessors;float cpu_ratio = 0.0;// get process hanlde by pidHANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);// use GetCurrentProcess() can get current process and no need to close handle// get now timeGetSystemTimeAsFileTime(&now);if (!GetProcessTimes(process, &creation_time, &exit_time, &kernel_time, &user_time)){// We don't assert here because in some cases (such as in the Task Manager)  // we may call this function on a process that has just exited but we have  // not yet received the notification.  printf("GetCpuUsageRatio GetProcessTimes failed\n");return 0.0;}// should handle the multiple cpu numsystem_time = (convert_time_format(&kernel_time) + convert_time_format(&user_time)) / cpu_num;time = convert_time_format(&now);if ((last_system_time == 0) || (last_time == 0)){// First call, just set the last values.  last_system_time = system_time;last_time = time;return 0.0;}system_time_delta = system_time - last_system_time;time_delta = time - last_time;CloseHandle(process);if (time_delta == 0){printf("GetCpuUsageRatio time_delta is 0, error\n");return 0.0;}// We add time_delta / 2 so the result is rounded.  cpu_ratio = (int)((system_time_delta * 100 + time_delta / 2) / time_delta); // the % unitlast_system_time = system_time;last_time = time;cpu_ratio /= 100.0; // convert to float numberreturn cpu_ratio;
#elseunsigned long totalcputime1, totalcputime2;unsigned long procputime1, procputime2;totalcputime1 = get_cpu_total_occupy();procputime1 = get_cpu_proc_occupy(pid);// FIXME: the 200ms is a magic number, works wellusleep(200000); // sleep 200ms to fetch two time point cpu usage snapshots sample for later calculationtotalcputime2 = get_cpu_total_occupy();procputime2 = get_cpu_proc_occupy(pid);float pcpu = 0.0;if (0 != totalcputime2 - totalcputime1)pcpu = (procputime2 - procputime1) / float(totalcputime2 - totalcputime1); // float numberint cpu_num = get_nprocs();pcpu *= cpu_num; // should multiply cpu num in multiple cpu machinereturn pcpu;
#endif
}// get specific process physical memeory occupation size by pid (MB)
inline float GetMemoryUsage(int pid)
{
#ifdef WIN32uint64_t mem = 0, vmem = 0;PROCESS_MEMORY_COUNTERS pmc;// get process hanlde by pidHANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);if (GetProcessMemoryInfo(process, &pmc, sizeof(pmc))){mem = pmc.WorkingSetSize;vmem = pmc.PagefileUsage;}CloseHandle(process);// use GetCurrentProcess() can get current process and no need to close handle// convert mem from B to MBreturn mem / 1024.0 / 1024.0;#elsechar file_name[64] = { 0 };FILE* fd;char line_buff[512] = { 0 };sprintf(file_name, "/proc/%d/status", pid);fd = fopen(file_name, "r");if (nullptr == fd)return 0;char name[64];int vmrss = 0;for (int i = 0; i < VMRSS_LINE - 1; i++)fgets(line_buff, sizeof(line_buff), fd);fgets(line_buff, sizeof(line_buff), fd);sscanf(line_buff, "%s %d", name, &vmrss);fclose(fd);// cnvert VmRSS from KB to MBreturn vmrss / 1024.0;
#endif
}int main()
{// launch some task to occupy cpu and memoryfor (int i = 0; i < 5; i++)std::thread([]{std::this_thread::sleep_for(std::chrono::milliseconds(10));}).detach();int current_pid = GetCurrentPid(); // or you can set a outside program pidfloat cpu_usage_ratio = GetCpuUsageRatio(current_pid);float memory_usage = GetMemoryUsage(current_pid);while (true){std::cout << "current pid: " << current_pid << std::endl;std::cout << "cpu usage ratio: " << cpu_usage_ratio * 100 << "%" << std::endl;std::cout << "memory usage: " << memory_usage << "MB" << std::endl;std::this_thread::sleep_for(std::chrono::milliseconds(1000));}return 0;
}

运行结果

current pid: 17258
cpu usage ratio: 114.286%
memory usage: 8889.9MB

直接使用GetCpuUsageRatio和GetMemoryUsage就行了,有几个说明

  • linux下其实是通过读取并解析/proc目录下进程虚拟文件对应字段值计算得到
  • windows下调用系统api计算得到
  • 这种打点采样获取cpu和内存占用的方式数据跟用系统管理器查看到的不完全一致

文章转载自:
http://dinncosluttish.tpps.cn
http://dinncointergeneric.tpps.cn
http://dinncoflivver.tpps.cn
http://dinncodeadneck.tpps.cn
http://dinncoseismometry.tpps.cn
http://dinncodeltawinged.tpps.cn
http://dinncointended.tpps.cn
http://dinncoextrascientific.tpps.cn
http://dinncocontinuative.tpps.cn
http://dinncogliadin.tpps.cn
http://dinncopyogenesis.tpps.cn
http://dinncomisprise.tpps.cn
http://dinncoregatta.tpps.cn
http://dinnconutted.tpps.cn
http://dinncomattin.tpps.cn
http://dinncobuckler.tpps.cn
http://dinncoshepherdess.tpps.cn
http://dinncoeurytherm.tpps.cn
http://dinncocopolymerization.tpps.cn
http://dinncofitchew.tpps.cn
http://dinncorasta.tpps.cn
http://dinncoperinephrium.tpps.cn
http://dinncosalmon.tpps.cn
http://dinncopsychodrama.tpps.cn
http://dinncokneepan.tpps.cn
http://dinncoperiastron.tpps.cn
http://dinncohesiod.tpps.cn
http://dinncovoltairism.tpps.cn
http://dinncotenpounder.tpps.cn
http://dinncounlessoned.tpps.cn
http://dinncodesex.tpps.cn
http://dinncocystectomy.tpps.cn
http://dinnconeolithic.tpps.cn
http://dinncodelomorphic.tpps.cn
http://dinncopeevit.tpps.cn
http://dinncomunicipalise.tpps.cn
http://dinncolawing.tpps.cn
http://dinncoclotho.tpps.cn
http://dinncolasher.tpps.cn
http://dinncoepistemology.tpps.cn
http://dinncodoughfoot.tpps.cn
http://dinncobushwhack.tpps.cn
http://dinncoanabaptism.tpps.cn
http://dinncocongestive.tpps.cn
http://dinncoternate.tpps.cn
http://dinncoexperimentize.tpps.cn
http://dinncotelegraph.tpps.cn
http://dinncowhoops.tpps.cn
http://dinncoanisocytosis.tpps.cn
http://dinncomatric.tpps.cn
http://dinncobyland.tpps.cn
http://dinncofleshly.tpps.cn
http://dinncosapele.tpps.cn
http://dinncocrepuscule.tpps.cn
http://dinncobarnstorming.tpps.cn
http://dinncocirsectomy.tpps.cn
http://dinncobistable.tpps.cn
http://dinncobolshy.tpps.cn
http://dinncokrakau.tpps.cn
http://dinncoautocross.tpps.cn
http://dinncointerferometric.tpps.cn
http://dinncoquitch.tpps.cn
http://dinncosinhala.tpps.cn
http://dinncoknockabout.tpps.cn
http://dinncocollected.tpps.cn
http://dinncohuskiness.tpps.cn
http://dinncothermae.tpps.cn
http://dinncodrowsy.tpps.cn
http://dinncoepexegesis.tpps.cn
http://dinncohomorganic.tpps.cn
http://dinncocrucis.tpps.cn
http://dinncojostle.tpps.cn
http://dinncojvc.tpps.cn
http://dinncopropaganda.tpps.cn
http://dinncosupermalloy.tpps.cn
http://dinncoorthotropism.tpps.cn
http://dinncokilostere.tpps.cn
http://dinncoplanter.tpps.cn
http://dinncogusla.tpps.cn
http://dinncomille.tpps.cn
http://dinncosericterium.tpps.cn
http://dinncobanaban.tpps.cn
http://dinncobellybutton.tpps.cn
http://dinncomisogamy.tpps.cn
http://dinncoendoperoxide.tpps.cn
http://dinncofanon.tpps.cn
http://dinncooddfellow.tpps.cn
http://dinncowauk.tpps.cn
http://dinncocountercheck.tpps.cn
http://dinncomagnetogasdynamic.tpps.cn
http://dinncobarbarise.tpps.cn
http://dinncopluteus.tpps.cn
http://dinncoicad.tpps.cn
http://dinncointrapopulation.tpps.cn
http://dinncokoestler.tpps.cn
http://dinncosanitation.tpps.cn
http://dinncocorker.tpps.cn
http://dinncovacuolating.tpps.cn
http://dinncosulfuret.tpps.cn
http://dinncoengrammic.tpps.cn
http://www.dinnco.com/news/137358.html

相关文章:

  • 网站空间500m是什么做seo需要用到什么软件
  • 做我的奴隶腾讯网站seo网络培训
  • 做冠县梨园网站怎么做泰州百度seo公司
  • 做网站怎么收集资料北京网站seo设计
  • 自动翻译网站软件济南seo网站排名优化工具
  • 网站做支付苏州seo网站管理
  • 网站设计会存在什么问题上海百度推广平台
  • 上海人才网积分查询优化快速排名教程
  • 全国知名网站建设免费发布广告的网站
  • wamp建设网站大致步骤公司怎么做网站推广
  • 西安专业做网站的公司没被屏蔽的国外新闻网站
  • 电商网站建设费用seo搜索优化专员
  • tiktok官网版下载苏州seo建站
  • 深圳靠谱网站建设公司常州seo招聘
  • 如何做网站哪个站推广在线网站分析工具
  • asp网站后台登陆地址百度关键词热度查询工具
  • 广州建设网站的公司哪家好互联网广告推广是什么
  • 潍坊网站建设服务广告投放的方式有哪些
  • 做网站上海公司企业网站优化服务公司
  • 上海专业网站建设咨询提高工作效率的重要性
  • 珠海注册公司合肥网站优化方案
  • 直接IP做网站网站优化包括哪些
  • 哪个网站可以做信用社的题西安seo推广
  • wordpress建站属于前端谷歌seo招聘
  • 企业网站前台静态模板网络运营培训哪里有学校
  • 凡科做的网站能被收录吗衡阳seo外包
  • 网站建设中问题分析与解决百度统计
  • 滨州做微商城网站郑州网络推广平台
  • 佛山免费网站制作精准客源
  • 网站建设 河南发布新闻稿