diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index 374c9da0edf4..8c0db365f8a5 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -1276,6 +1276,12 @@ static int sorted_state[] = { return (diff > 0 ? 1 : -1); \ } while (0) +#define ORDERKEY_PID(a, b) do { \ + int diff = (int)b->ki_pid - (int)a->ki_pid; \ + if (diff != 0) \ + return (diff > 0 ? 1 : -1); \ +} while (0) + /* compare_cpu - the comparison function for sorting by cpu percentage */ static int @@ -1420,6 +1426,24 @@ compare_swap(const void *arg1, const void *arg2) return (0); } +/* compare_processid - the comparison function for sorting by pid */ +static int +compare_processid(const void *arg1, const void *arg2) +{ + const struct kinfo_proc *p1 = *(const struct kinfo_proc * const *)arg1; + const struct kinfo_proc *p2 = *(const struct kinfo_proc * const *)arg2; + + ORDERKEY_PID(p1, p2); + ORDERKEY_PCTCPU(p1, p2); + ORDERKEY_CPTICKS(p1, p2); + ORDERKEY_STATE(p1, p2); + ORDERKEY_PRIO(p1, p2); + ORDERKEY_RSSIZE(p1, p2); + ORDERKEY_MEM(p1, p2); + + return (0); +} + /* assorted comparison functions for sorting by i/o */ static int @@ -1511,7 +1535,7 @@ int (*compares[])(const void *arg1, const void *arg2) = { compare_ivcsw, compare_jid, compare_swap, - NULL + compare_processid };