diff --git a/Process.c b/Process.c index 41c7d40d..e1fbd688 100644 --- a/Process.c +++ b/Process.c @@ -27,6 +27,7 @@ in the source distribution for its full text. #include #include #include +#include #ifdef HAVE_PLPA #include @@ -98,9 +99,10 @@ typedef struct Process_ { long int priority; long int nice; long int nlwp; + char starttime_show[8]; + time_t starttime_ctime; #ifdef DEBUG long int itrealvalue; - unsigned long int starttime; unsigned long int vsize; long int rss; unsigned long int rlim; @@ -186,7 +188,7 @@ const char *Process_fieldTitles[] = { "", " PID ", "Command ", "S ", " PPID ", " PGRP ", " SESN ", " TTY ", "TPGID ", "- ", "- ", "- ", "- ", "- ", " UTIME+ ", " STIME+ ", "- ", "- ", "PRI ", " NI ", "- ", - "- ", "- ", "- ", "- ", "- ", "- ", "- ", + "START ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "- ", "CPU ", " VIRT ", " RES ", " SHR ", " CODE ", " DATA ", " LIB ", " DIRTY ", " UID ", "CPU% ", "MEM% ", @@ -403,6 +405,7 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel } break; } + case STARTTIME: snprintf(buffer, n, "%s", this->starttime_show); break; #ifdef HAVE_OPENVZ case CTID: snprintf(buffer, n, "%5u ", this->ctid); break; case VPID: snprintf(buffer, n, "%5u ", this->vpid); break; @@ -578,6 +581,8 @@ int Process_compare(const void* v1, const void* v2) { return strcmp(p1->comm, p2->comm); case NLWP: return (p1->nlwp - p2->nlwp); + case STARTTIME: + return (p1->starttime_ctime - p2->starttime_ctime); #ifdef HAVE_OPENVZ case CTID: return (p1->ctid - p2->ctid); diff --git a/Process.h b/Process.h index 6114f9c3..55359af3 100644 --- a/Process.h +++ b/Process.h @@ -30,6 +30,7 @@ in the source distribution for its full text. #include #include #include +#include #ifdef HAVE_PLPA #include @@ -100,9 +101,10 @@ typedef struct Process_ { long int priority; long int nice; long int nlwp; + char starttime_show[8]; + time_t starttime_ctime; #ifdef DEBUG long int itrealvalue; - unsigned long int starttime; unsigned long int vsize; long int rss; unsigned long int rlim; diff --git a/ProcessList.c b/ProcessList.c index f3845d63..f633a669 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -431,7 +431,7 @@ static int ProcessList_readStatFile(Process *proc, FILE *f, char *command) { &proc->minflt, &proc->cminflt, &proc->majflt, &proc->cmajflt, &proc->utime, &proc->stime, &proc->cutime, &proc->cstime, &proc->priority, &proc->nice, &proc->nlwp, &proc->itrealvalue, - &proc->starttime, &proc->vsize, &proc->rss, &proc->rlim, + &zero, &proc->vsize, &proc->rss, &proc->rlim, &proc->startcode, &proc->endcode, &proc->startstack, &proc->kstkesp, &proc->kstkeip, &proc->signal, &proc->blocked, &proc->sigignore, &proc->sigcatch, &proc->wchan, &proc->nswap, &proc->cnswap, @@ -474,6 +474,13 @@ static bool ProcessList_readStatusFile(Process* proc, const char* dirname, char* if (statok == -1) return false; proc->st_uid = sstat.st_uid; + + struct tm date; + time_t ctime = sstat.st_ctime; + proc->starttime_ctime = ctime; + (void) localtime_r((time_t*) &ctime, &date); + strftime(proc->starttime_show, 7, ((ctime > time(NULL) - 86400) ? "%R " : "%b%d "), &date); + return true; }