WINDOWs平台,利用CreateProcess实现进程复制
2009-11-13 23:48
696 查看
由于某种原因,要实现在主机端空CPU与内存利用的工具,CPU还比较容易控制,但内存控制比较不容易。
在WINDOWs/Linux平台上,用户进程虽然有4G逻辑地址空间,但实际上用户可控制的只有2G(Linux应为3G)的地址空间
因此在主机端内存大于2G以后,单进程无法控制内存利用率,需要将当前进程复制一份,或者多份(在Linux下fork() 可实现该功能,但Windows实现起来比较不容易)
首先定义读取内存信息,包括物理内存总量 与可用内存总量
runmemory.h 头文件定义
runmemory.cpp 文件定义
主文件定义
在WINDOWs/Linux平台上,用户进程虽然有4G逻辑地址空间,但实际上用户可控制的只有2G(Linux应为3G)的地址空间
因此在主机端内存大于2G以后,单进程无法控制内存利用率,需要将当前进程复制一份,或者多份(在Linux下fork() 可实现该功能,但Windows实现起来比较不容易)
首先定义读取内存信息,包括物理内存总量 与可用内存总量
runmemory.h 头文件定义
#ifndef _RUN_MEMORY_H #define _RUN_MEMORY_H struct MemoryInfo { unsigned long totalPhyMemory; unsigned long availablePhyMemory; }; class MemoryInfoManager { public: MemoryInfoManager(); public: ~MemoryInfoManager(); public: MemoryInfo *GetMemoryInfo(); }; #endif
runmemory.cpp 文件定义
#include "windows.h" #include "runmemory.h" MemoryInfoManager::MemoryInfoManager() { } MemoryInfoManager::~MemoryInfoManager() { } MemoryInfo* MemoryInfoManager::GetMemoryInfo() { MEMORYSTATUS memoryStatus; memoryStatus.dwLength=sizeof(MEMORYSTATUS); GlobalMemoryStatus(&memoryStatus); MemoryInfo *info=new MemoryInfo; info->totalPhyMemory=memoryStatus.dwTotalPhys; info->availablePhyMemory=memoryStatus.dwAvailPhys; return info; }
主文件定义
#include "windows.h" #include <iostream> #include "runmemory.h" using namespace std; int main(int argc,char* argv[]) { cout<<argv[0]<<endl; STARTUPINFO si; //一些必备参数设置 memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; //必备参数设置结束 char *cmdLine=new char[sizeof(argv[0])+10]; cmdLine=strcat(argv[0]," 100"); if(argc<2) { if(!CreateProcess(NULL,cmdLine,NULL,NULL,FALSE,NULL ,NULL,NULL,&si,&pi)) //"d://test//te.exe"是您要运行的程序//的路径 { cout<<"Create Fail!"<<endl; exit(1); } else { cout<<"Success!"<<endl; } } MemoryInfoManager manager; while(TRUE) { Sleep(2000); MemoryInfo *info=manager.GetMemoryInfo(); cout<<"Total Physical Memory:"<<info->totalPhyMemory<<" Available Physical Memory:"<<info->availablePhyMemory<<endl; delete info; cout<<"resume"<<endl; } return 0; }
相关文章推荐
- 利用bat脚本语言实现windows下文件的可靠复制与删除
- Windows下利用C语言程序设置环境变量---能否用环境变量实现进程间的通信?
- windows系统调用 利用事件对象实现进程通信
- Windows平台下利用CSP来实现加密保护
- 利用pscp实现从putty远程终端复制文件到本地windows操作系统
- 如何在Windows平台下实现进程隐藏
- Windows平台基于多进程的echo服务器简单实现
- java利用Jsch实现在windows平台远程操作linux服务器
- 利用消息队列实现两个进程之间的文件复制
- 多进程之间的互斥信号量实现(Linux和windows跨平台)
- java利用Jsch实现在windows平台获取linux服务器文件
- 深入探究Windows平台客户端安全问题-进程地址空间入侵和白加黑高阶利用
- 利用socket实现Windows与Linux平台间的网络通信
- 利用Windows的命令行工具tasklist和findstr,start结合计划任务实现一种进程监控的方案
- 利用gpio_keys.c便捷在android平台实现矩阵键盘
- 利用windows任务计划实现oracle的定期备份
- Windows 平台上的使用 Python 语言实现 appium 自动化程序环境配置
- Windows中利用计划任务实现自动备份文件
- 利用码云平台和wamp集成环境,实现多人开发php项目laravel框架构建的前凑准备
- Windows平台下使用Dokan实现文件系统的开发