100 lines
4.6 KiB
Plaintext
100 lines
4.6 KiB
Plaintext
---
|
|
ps/common.h | 1 +
|
|
ps/global.c | 5 ++++-
|
|
ps/output.c | 19 ++++++++++---------
|
|
3 files changed, 15 insertions(+), 10 deletions(-)
|
|
|
|
--- ps/common.h
|
|
+++ ps/common.h 2018-04-04 11:14:33.915688098 +0000
|
|
@@ -303,6 +303,7 @@ extern int running_only;
|
|
extern int screen_cols;
|
|
extern int screen_rows;
|
|
extern time_t seconds_since_boot;
|
|
+extern unsigned long long jiffies_since_boot;
|
|
extern selection_node *selection_list;
|
|
extern unsigned simple_select;
|
|
extern sort_node *sort_list;
|
|
--- ps/global.c
|
|
+++ ps/global.c 2018-04-04 11:14:33.915688098 +0000
|
|
@@ -78,6 +78,7 @@ int prefer_bsd_defaults = -1
|
|
int screen_cols = -1;
|
|
int screen_rows = -1;
|
|
time_t seconds_since_boot = -1;
|
|
+unsigned long long jiffies_since_boot = -1;
|
|
selection_node *selection_list = (selection_node *)0xdeadbeef;
|
|
unsigned simple_select = 0xffffffff;
|
|
sort_node *sort_list = (sort_node *)0xdeadbeef; /* ready-to-use sort list */
|
|
@@ -361,6 +362,7 @@ static const char *set_personality(void)
|
|
/************ Call this to reinitialize everything ***************/
|
|
void reset_global(void){
|
|
static proc_t p;
|
|
+ double uptime_secs;
|
|
reset_selection_list();
|
|
look_up_our_self(&p);
|
|
set_screen_size();
|
|
@@ -383,7 +385,8 @@ void reset_global(void){
|
|
negate_selection = 0;
|
|
page_size = getpagesize();
|
|
running_only = 0;
|
|
- seconds_since_boot = uptime(0,0);
|
|
+ seconds_since_boot = uptime(&uptime_secs,0);
|
|
+ jiffies_since_boot = ((long double)uptime_secs * Hertz);
|
|
selection_list = NULL;
|
|
simple_select = 0;
|
|
sort_list = NULL;
|
|
--- ps/output.c
|
|
+++ ps/output.c 2018-04-04 11:14:33.915688098 +0000
|
|
@@ -134,6 +134,7 @@ static int sr_ ## NAME (const proc_t* P,
|
|
#define cook_time(P) (P->utime + P->stime) / Hertz
|
|
|
|
#define cook_etime(P) (((unsigned long long)seconds_since_boot >= (P->start_time / Hertz)) ? ((unsigned long long)seconds_since_boot - (P->start_time / Hertz)) : 0)
|
|
+#define cook_jtime(P) (((unsigned long long)jiffies_since_boot >= (P->start_time)) ? ((unsigned long long)jiffies_since_boot - (P->start_time)) : 0)
|
|
|
|
#define CMP_COOKED_TIME(NAME) \
|
|
static int sr_ ## NAME (const proc_t* P, const proc_t* Q) { \
|
|
@@ -507,11 +508,11 @@ static int pr_etimes(char *restrict cons
|
|
static int pr_c(char *restrict const outbuf, const proc_t *restrict const pp){
|
|
unsigned long long total_time; /* jiffies used by this process */
|
|
unsigned pcpu = 0; /* scaled %cpu, 99 means 99% */
|
|
- unsigned long long seconds; /* seconds of process life */
|
|
+ unsigned long long jiffies; /* jiffies of process life */
|
|
total_time = pp->utime + pp->stime;
|
|
if(include_dead_children) total_time += (pp->cutime + pp->cstime);
|
|
- seconds = cook_etime(pp);
|
|
- if(seconds) pcpu = (total_time * 100ULL / Hertz) / seconds;
|
|
+ jiffies = cook_jtime(pp);
|
|
+ if(jiffies) pcpu = (total_time * 100ULL) / jiffies;
|
|
if (pcpu > 99U) pcpu = 99U;
|
|
return snprintf(outbuf, COLWID, "%2u", pcpu);
|
|
}
|
|
@@ -519,11 +520,11 @@ static int pr_c(char *restrict const out
|
|
static int pr_pcpu(char *restrict const outbuf, const proc_t *restrict const pp){
|
|
unsigned long long total_time; /* jiffies used by this process */
|
|
unsigned pcpu = 0; /* scaled %cpu, 999 means 99.9% */
|
|
- unsigned long long seconds; /* seconds of process life */
|
|
+ unsigned long long jiffies; /* jiffies of process life */
|
|
total_time = pp->utime + pp->stime;
|
|
if(include_dead_children) total_time += (pp->cutime + pp->cstime);
|
|
- seconds = cook_etime(pp);
|
|
- if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
|
|
+ jiffies = cook_jtime(pp);
|
|
+ if(jiffies) pcpu = (total_time * 1000ULL) / jiffies;
|
|
if (pcpu > 999U)
|
|
return snprintf(outbuf, COLWID, "%u", pcpu/10U);
|
|
return snprintf(outbuf, COLWID, "%u.%u", pcpu/10U, pcpu%10U);
|
|
@@ -532,11 +533,11 @@ static int pr_pcpu(char *restrict const
|
|
static int pr_cp(char *restrict const outbuf, const proc_t *restrict const pp){
|
|
unsigned long long total_time; /* jiffies used by this process */
|
|
unsigned pcpu = 0; /* scaled %cpu, 999 means 99.9% */
|
|
- unsigned long long seconds; /* seconds of process life */
|
|
+ unsigned long long jiffies; /* jiffies of process life */
|
|
total_time = pp->utime + pp->stime;
|
|
if(include_dead_children) total_time += (pp->cutime + pp->cstime);
|
|
- seconds = cook_etime(pp);
|
|
- if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
|
|
+ jiffies = cook_jtime(pp);
|
|
+ if(jiffies) pcpu = (total_time * 1000ULL) / jiffies;
|
|
if (pcpu > 999U) pcpu = 999U;
|
|
return snprintf(outbuf, COLWID, "%3u", pcpu);
|
|
}
|