- NetBSD Manual Pages
PROC_COMPARE(3) NetBSD Library Functions Manual PROC_COMPARE(3)
Powered by man-cgi (2021-06-01).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.
proc_compare -- compare two processes' interactivity
System Utilities Library (libutil, -lutil)
proc_compare(const struct kinfo_proc2 *p1, const struct kinfo_lwp *l1,
const struct kinfo_proc2 *p2, const struct kinfo_lwp *l2);
The proc_compare() function compares two processes that are on the same
terminal for their interactivity. This means that the process returned
is the one that has a better chance being the active foreground process
on that tty. This algorithm is used in the kernel for SIGINFO reporting
and in userland by w(1).
The algorithm used is as follows:
· If one of them is runnable, it is preferred.
· If both are runnable, the one with the largest CPU percent is
· In a CPU percent tie, the one started more recently wins.
· If none are runnable, and one of them is a zombie, the non-zom-
bie is preferred
· If both are zombies, the one started more recently wins.
· If neither is a zombie, the one with the smaller sleep time
· In a tie, and one is sleeping in non-interruptible sleep, pre-
fer that one.
· If both are in the same state, the one started more recently is
In all cases where the most recently started wins, if there was no win-
ner, the one with the largest PID wins.
The proc_compare() function returns 0 if p1 is to be preferred and 1 if
p2 is to be preferred.
The proc_compare() was extracted from src/sys/kern/tty.c and
src/usr.bin/w/proc_compare.c and merged in NetBSD 6.0.
NetBSD 9.99 October 20, 2011 NetBSD 9.99