NAME
proc_compare —
compare two processes'
interactivity
LIBRARY
System Utilities Library (libutil, -lutil)
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
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 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.
In all cases where the most recently started wins, if there was no winner, the
one with the largest PID wins.
RETURN VALUES
The
proc_compare() function returns
0
if
p1 is to be preferred and
1
if
p2 is to be preferred.
SEE ALSO
w(1)
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.