|
发表于 2023-11-13 16:20:20
|
显示全部楼层
要实现这个功能,你可以使用 Windows API 提供的相关函数来获取进程的信息。以下是一个可能的解决方案:
- #include <Windows.h>
- #include <iostream>
- #include <string>
- int main(int argc, char* argv[])
- {
- if (argc != 2)
- {
- std::cout << "Usage: monitor [executable]" << std::endl;
- return 1;
- }
- std::string executable = argv[1];
- // 创建进程
- STARTUPINFOA startupInfo;
- PROCESS_INFORMATION processInfo;
- ZeroMemory(&startupInfo, sizeof(startupInfo));
- ZeroMemory(&processInfo, sizeof(processInfo));
- if (!CreateProcessA(NULL, const_cast<char*>(executable.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo))
- {
- std::cout << "Failed to start the process." << std::endl;
- return 1;
- }
- // 等待进程结束
- WaitForSingleObject(processInfo.hProcess, INFINITE);
- // 获取进程退出代码
- DWORD exitCode;
- GetExitCodeProcess(processInfo.hProcess, &exitCode);
- // 获取进程使用时间
- FILETIME creationTime, exitTime, kernelTime, userTime;
- GetProcessTimes(processInfo.hProcess, &creationTime, &exitTime, &kernelTime, &userTime);
- ULARGE_INTEGER startTime, endTime;
- startTime.LowPart = creationTime.dwLowDateTime;
- startTime.HighPart = creationTime.dwHighDateTime;
- endTime.LowPart = exitTime.dwLowDateTime;
- endTime.HighPart = exitTime.dwHighDateTime;
- double elapsedTime = (endTime.QuadPart - startTime.QuadPart) / 10000.0;
- // 获取进程内存信息
- PROCESS_MEMORY_COUNTERS_EX memoryCounters;
- GetProcessMemoryInfo(processInfo.hProcess, (PROCESS_MEMORY_COUNTERS*)&memoryCounters, sizeof(memoryCounters));
- SIZE_T memoryUsage = memoryCounters.WorkingSetSize;
- // 输出结果
- std::cout << "time: " << elapsedTime << " ms" << std::endl;
- std::cout << "memory: " << memoryUsage / 1024 << "KB" << std::endl;
- std::cout << "return code: " << exitCode << std::endl;
- // 清理资源
- CloseHandle(processInfo.hProcess);
- CloseHandle(processInfo.hThread);
- return 0;
- }
复制代码
这个程序使用了 Windows API 的一些函数,包括 CreateProcessA、WaitForSingleObject、GetExitCodeProcess、GetProcessTimes 和 GetProcessMemoryInfo。它通过调用 CreateProcessA 来启动指定的可执行文件,并等待进程结束。然后,它使用其他函数来获取进程的退出代码、使用时间和内存占用信息,并将结果输出到控制台。
你可以将上述代码保存为名为 monitor.cpp 的源文件,并使用 C++ 编译器进行编译。然后,在命令行中使用 monitor 命令来运行你的程序并监视另一个可执行文件的运行状态。
希望这个解决方案对你有所帮助,如有其他问题,请随时提问。 |
|