Fix determining OpenVZ VEID on Linux kernels >= 2.6.18. Index: htop/ProcessList.c =================================================================== --- htop.orig/ProcessList.c 2009-04-05 11:48:46.340045591 +0300 +++ htop/ProcessList.c 2009-04-05 12:22:08.819047243 +0300 @@ -623,20 +623,28 @@ process->vpid = process->pid; process->ctid = 0; } else { - snprintf(statusfilename, MAX_NAME, "%s/%s/stat", dirname, name); + snprintf(statusfilename, MAX_NAME, "%s/%s/status", dirname, name); status = ProcessList_fopen(this, statusfilename, "r"); if (status == NULL) goto errorReadingProcess; - num = ProcessList_fread(this, status, - "%*u %*s %*c %*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %*u %*u %*u %*u %*u " - "%*u %*u %u %u", - &process->vpid, &process->ctid); - fclose(status); + else { + char buffer[256]; + process->ctid = 0; + while (!feof(status)) { + char* ok = fgets(buffer, 255, status); + if (!ok) + break; + + if (String_startsWith(buffer, "envID:")) { + int ctid; + int ok = ProcessList_read(this, buffer, "envID:\t%d", &ctid); + if (ok >= 1) { + process->ctid = ctid; + } + } + } + fclose(status); + } } #endif