Index: configure.ac =================================================================== --- configure.ac (revision 129) +++ configure.ac (working copy) @@ -69,6 +69,11 @@ AC_DEFINE(HAVE_OPENVZ, 1, [Define if openvz support enabled.]) fi +AC_ARG_ENABLE(vserver, [AC_HELP_STRING([--enable-vserver], [enable Linux-VServer support])], ,enable_vserver="no") +if test "x$enable_vserver" = xyes; then + AC_DEFINE(HAVE_VSERVER, 1, [Define if Linux-VServer support enabled.]) +fi + AC_ARG_ENABLE(taskstats, [AC_HELP_STRING([--enable-taskstats], [enable per-task IO Stats (taskstats kernel sup required)])], ,enable_taskstats="yes") if test "x$enable_taskstats" = xyes; then AC_DEFINE(HAVE_TASKSTATS, 1, [Define if taskstats support enabled.]) Index: ProcessList.c =================================================================== --- ProcessList.c (revision 129) +++ ProcessList.c (working copy) @@ -640,6 +640,24 @@ } #endif + #ifdef HAVE_VSERVER + snprintf(statusfilename, MAX_NAME, "%s/%s/status", dirname, name); + if (access(statusfilename, R_OK) != 0) { + process->ctx = 0; + } else { + status = ProcessList_fopen(this, statusfilename, "r"); + if (status == NULL) + goto errorReadingProcess; + char buffer[128]; + while (!feof(status)) { + fgets(buffer, 128, status); + if (strncmp(buffer, "VxID:", 5) == 0) + ProcessList_read(this, buffer, "VxID: %u", &process->ctx); + } + fclose(status); + } + #endif + snprintf(statusfilename, MAX_NAME, "%s/%s/cmdline", dirname, name); status = ProcessList_fopen(this, statusfilename, "r"); if (!status) { Index: Process.c =================================================================== --- Process.c (revision 129) +++ Process.c (working copy) @@ -159,6 +159,9 @@ #ifdef HAVE_OPENVZ "VEID", "VPID", #endif +#ifdef HAVE_VSERVER + "CTX", +#endif #ifdef HAVE_TASKSTATS "RCHAR", "WCHAR", "SYSCR", "SYSCW", "RBYTES", "WBYTES", "CNCLWB", "IO_READ_RATE", "IO_WRITE_RATE", "IO_RATE", @@ -178,6 +181,9 @@ #ifdef HAVE_OPENVZ " VEID ", " VPID ", #endif +#ifdef HAVE_VSERVER + " CTX ", +#endif #ifdef HAVE_TASKSTATS " RD_CHAR ", " WR_CHAR ", " RD_SYSC ", " WR_SYSC ", " IO_RD ", " IO_WR ", " IO_CANCEL ", " IORR ", " IOWR ", " IO ", @@ -388,6 +394,9 @@ case VEID: snprintf(buffer, n, "%5u ", this->veid); break; case VPID: snprintf(buffer, n, "%5u ", this->vpid); break; #endif + #ifdef HAVE_VSERVER + case CTX: snprintf(buffer, n, "%5u ", this->ctx); break; + #endif #ifdef HAVE_TASKSTATS case RCHAR: snprintf(buffer, n, "%10llu ", this->io_rchar); break; case WCHAR: snprintf(buffer, n, "%10llu ", this->io_wchar); break; @@ -556,6 +565,10 @@ case VPID: return (p1->vpid - p2->vpid); #endif + #ifdef HAVE_VSERVER + case CTX: + return (p1->ctx - p2->ctx); + #endif #ifdef HAVE_TASKSTATS case RCHAR: diff = p2->io_rchar - p1->io_rchar; goto test_diff; case WCHAR: diff = p2->io_wchar - p1->io_wchar; goto test_diff; Index: Process.h =================================================================== --- Process.h (revision 129) +++ Process.h (working copy) @@ -51,6 +51,9 @@ #ifdef HAVE_OPENVZ VEID, VPID, #endif + #ifdef HAVE_VSERVER + CTX, + #endif #ifdef HAVE_TASKSTATS RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE, #endif @@ -126,6 +129,9 @@ unsigned int veid; unsigned int vpid; #endif + #ifdef HAVE_VSERVER + unsigned int ctx; + #endif #ifdef HAVE_TASKSTATS unsigned long long io_rchar; unsigned long long io_wchar;