-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProcInfo.cpp
81 lines (70 loc) · 2.16 KB
/
ProcInfo.cpp
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "ProcInfo.h"
const long ProcInfo::pageSize = getPageSizeInKB();
const string ProcInfo::swapTag = "VmSwap";
const string ProcInfo::nameTag = "Name:";
const string ProcInfo::swapTag2 = "Swap:";
ProcInfo::ProcInfo(string procFolder){
dir = procFolder;
getIntPidFromFolder(procFolder);
definePaths();
memUse = 0;
name = "no-name";
majorPageFaults = 0;
minorPageFaults = 0;
fillInfo();
}
void ProcInfo::fillInfo(){
name = getValueFromLineWithTagRemovingTag(statusPath,
nameTag);
name = fillWithSpacesIfSmallerThan(name, minNameSize);
//cout << "Searching for swap usage in " << statusPath << endl;
swapUse = getValueFromLineWithTagRemovingTag(statusPath,
swapTag);
if(swapUse == "none"){
swapUse = getValueFromLineWithTagRemovingTag(smapsPath,
swapTag2);
}
//cout << "swapUse " << swapUse << endl;
int pages = valueXInIntegersFile(statmPath, pagsIndex);
//cout << "pages " << pages << endl;
int sharedPages = valueXInIntegersFile(statmPath,
sharedPagsIndex);
//cout << "sharedPages " << sharedPages << endl;
memUse = (pages - sharedPages)*pageSize;
majorPageFaults = valueXInIntegersFile(statPath,
majorPageFaultsIndex);
minorPageFaults = valueXInIntegersFile(statPath,
minorPageFaultsIndex);
}
void ProcInfo::print(){
printHeader();
printInLine();
}
void ProcInfo::printInLine(){
cout << pid << "\t" << name << "\t\t"
<< ((float)memUse/1024) << "\t\t"
<< swapUse << "\t\t"
<< majorPageFaults << "\t"
<< minorPageFaults << endl;
}
void ProcInfo::printHeader(){
cout << "MJFLT: Major page faults;" << endl
<< "MNFLT: Minor page faults;" << endl;
cout << "PID\tNAME\t\t\tMEMORY(MB)\tSWAP USE"
<< "\tMJFLT\tMNFLT" << endl;
}
void ProcInfo::getIntPidFromFolder(string procFolder){
string strPid = procFolder;
strPid.erase(0,6);
try{
pid = stoi(strPid);
}catch(...){
pid = -666;
}
}
void ProcInfo::definePaths(){
statPath = dir + "/stat";
statmPath = dir + "/statm";
statusPath = dir + "/status";
smapsPath = dir + "/smaps";
}