NAME
proc_compare
—
compare two processes'
interactivity
LIBRARY
library “libutil”
SYNOPSIS
#include
<sys/sysctl.h>
int
proc_compare
(const
struct kinfo_proc2 *p1,
const struct kinfo_lwp
*l1, const struct
kinfo_proc2 *p2, const
struct kinfo_lwp *l2);
DESCRIPTION
Theproc_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 preferred.
- In a CPU percent tie, the one started more recently wins.
- If none are runnable, and one of them is a zombie, the non-zombie is preferred
- If both are zombies, the one started more recently wins.
- If neither is a zombie, the one with the smaller sleep time wins.
- In a tie, and one is sleeping in non-interruptible sleep, prefer that one.
- If both are in the same state, the one started more recently is preferred.
RETURN VALUES
The proc_compare
() function returns
0
if p1 is to be preferred and
1
if p2 is to be
preferred.
SEE ALSO
HISTORY
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.