mirror of https://github.com/xzeldon/htop.git
Guess lxc or docker from /proc/1/mounts
At the moment this is used to make the memory meter report sane values even if the host has ZFS and that leaks through into a containerized environment Fixes #863 Includes a clever check for magic PROC_PID_INIT_INO in /proc/self/ns/pid thanks to Pavel Snajdr (snajpa)
This commit is contained in:
parent
2b7504b522
commit
7039abe109
|
@ -83,6 +83,8 @@ enum CapMode {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool Running_containerized = false;
|
||||||
|
|
||||||
const ScreenDefaults Platform_defaultScreens[] = {
|
const ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Main",
|
.name = "Main",
|
||||||
|
@ -355,7 +357,7 @@ void Platform_setMemoryValues(Meter* this) {
|
||||||
this->values[3] = pl->cachedMem;
|
this->values[3] = pl->cachedMem;
|
||||||
this->values[4] = pl->availableMem;
|
this->values[4] = pl->availableMem;
|
||||||
|
|
||||||
if (lpl->zfs.enabled != 0) {
|
if (lpl->zfs.enabled != 0 && !Running_containerized) {
|
||||||
this->values[0] -= lpl->zfs.size;
|
this->values[0] -= lpl->zfs.size;
|
||||||
this->values[3] += lpl->zfs.size;
|
this->values[3] += lpl->zfs.size;
|
||||||
}
|
}
|
||||||
|
@ -1017,6 +1019,31 @@ bool Platform_init(void) {
|
||||||
LibSensors_init();
|
LibSensors_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char target[PATH_MAX];
|
||||||
|
ssize_t ret = readlink(PROCDIR "/self/ns/pid", target, sizeof(target) - 1);
|
||||||
|
if (ret > 0) {
|
||||||
|
target[ret] = '\0';
|
||||||
|
|
||||||
|
if (!String_eq("pid:[4026531836]", target)) { // magic constant PROC_PID_INIT_INO from include/linux/proc_ns.h#L46
|
||||||
|
Running_containerized = true;
|
||||||
|
return true; // early return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE* fd = fopen(PROCDIR "/1/mounts", "r");
|
||||||
|
if (fd) {
|
||||||
|
char lineBuffer[256];
|
||||||
|
while (fgets(lineBuffer, sizeof(lineBuffer), fd)) {
|
||||||
|
// detect lxc or overlayfs and guess that this means we are running containerized
|
||||||
|
if (String_startsWith(lineBuffer, "lxcfs ") || String_startsWith(lineBuffer, "overlay ")) {
|
||||||
|
fprintf(stderr, "%s\n", lineBuffer);
|
||||||
|
Running_containerized = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fd);
|
||||||
|
} // if (fd)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue