Fix determining OpenVZ VEID on Linux kernels >= 2.6.18. Index: htop/ProcessList.c =================================================================== --- htop.orig/ProcessList.c 2011-01-16 17:02:59.000000000 +0200 +++ htop/ProcessList.c 2011-01-16 18:05:01.000000000 +0200 @@ -438,19 +438,26 @@ return; } char filename[MAX_NAME+1]; - snprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name); + snprintf(filename, MAX_NAME, "%s/%s/status", dirname, name); FILE* file = fopen(filename, "r"); if (!file) return; - fscanf(file, - "%*32u %*32s %*1c %*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %*32u %*32u %*32u %*32u %*32u " - "%*32u %*32u %32u %32u", - &process->vpid, &process->ctid); + + char buffer[256]; + process->ctid = 0; + while (!feof(file)) { + char* ok = fgets(buffer, 255, file); + if (!ok) + break; + + if (String_startsWith(buffer, "envID:")) { + int ctid; + int ok = sscanf(buffer, "envID:\t%d", &ctid); + if (ok >= 1) { + process->ctid = ctid; + } + } + } fclose(file); }