-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocessState.cpp
More file actions
35 lines (33 loc) · 1.17 KB
/
processState.cpp
File metadata and controls
35 lines (33 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <utils.h>
#include "processState.h"
void processState::getProcessState(processState::process& process, const std::string& processName) {
std::string cmd = "top -b -n 1 -w 512 | grep " + processName;
std::shared_ptr<FILE> pipe(popen(cmd.c_str(), "r"), pclose);
if (!pipe) {
logger::error("popen() failed!");
return;
}
char buffer[1024];
bzero(buffer, 1024);
process.name = processName;
while (!feof(pipe.get())) {
if (fgets(buffer, 1024, pipe.get()) != nullptr) {
//парсим полученную строку
std::vector<std::string> parsed;
utils::tokenize(buffer, " ", parsed);
process.pid = std::stol(parsed[0]);
process.memoryRes = std::stoi(parsed[5]);
process.state = parsed[7];
process.cpuPercent = std::stod(parsed[8]);
process.memPercent = std::stod(parsed[9]);
}
}
if(strlen(buffer) == 0){
process.pid = -1;
process.state = "NF";
process.memoryRes = 0;
process.cpuPercent = 0;
process.memPercent = 0;
logger::warn("Process", processName, "not found");
}
}