108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"     $NetBSD: proc_compare.3,v 1.2 2011/10/21 12:58:53 wiz Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 2011 The NetBSD Foundation, Inc.
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" This code is derived from software contributed to The NetBSD Foundation
 | 
						|
.\" by Christos Zoulas.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\" 3. All advertising materials mentioning features or use of this software
 | 
						|
.\"    must display the following acknowledgement:
 | 
						|
.\"        This product includes software developed by the NetBSD
 | 
						|
.\"        Foundation, Inc. and its contributors.
 | 
						|
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
 | 
						|
.\"    contributors may be used to endorse or promote products derived
 | 
						|
.\"    from this software without specific prior written permission.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 | 
						|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 | 
						|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
						|
.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 | 
						|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
						|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
						|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
						|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
						|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
						|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
						|
.\" POSSIBILITY OF SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\"
 | 
						|
.Dd October 20, 2011
 | 
						|
.Dt PROC_COMPARE 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm proc_compare
 | 
						|
.Nd compare two processes' interactivity
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libutil
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In sys/sysctl.h
 | 
						|
.Ft int
 | 
						|
.Fn "proc_compare" "const struct kinfo_proc2 *p1" "const struct kinfo_lwp *l1" \
 | 
						|
"const struct kinfo_proc2 *p2" "const struct kinfo_lwp *l2"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn 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
 | 
						|
.Dv SIGINFO
 | 
						|
reporting and in userland by
 | 
						|
.Xr w 1 .
 | 
						|
.Pp
 | 
						|
The algorithm used is as follows:
 | 
						|
.Bl -bullet -compact -offset indent
 | 
						|
.It
 | 
						|
If one of them is runnable, it is preferred.
 | 
						|
.It
 | 
						|
If both are runnable, the one with the largest CPU percent is preferred.
 | 
						|
.It
 | 
						|
In a CPU percent tie, the one started more recently wins.
 | 
						|
.It
 | 
						|
If none are runnable, and one of them is a zombie, the non-zombie is preferred
 | 
						|
.It
 | 
						|
If both are zombies, the one started more recently wins.
 | 
						|
.It
 | 
						|
If neither is a zombie, the one with the smaller sleep time wins.
 | 
						|
.It
 | 
						|
In a tie, and one is sleeping in non-interruptible sleep, prefer that one.
 | 
						|
.It
 | 
						|
If both are in the same state, the one started more recently is preferred.
 | 
						|
.El
 | 
						|
In all cases where the most recently started wins, if there was no winner,
 | 
						|
the one with the largest PID wins.
 | 
						|
.Sh RETURN VALUES
 | 
						|
The
 | 
						|
.Fn proc_compare
 | 
						|
function returns
 | 
						|
.Dv 0
 | 
						|
if
 | 
						|
.Fa p1
 | 
						|
is to be preferred
 | 
						|
and
 | 
						|
.Dv 1
 | 
						|
if
 | 
						|
.Fa p2
 | 
						|
is to be preferred.
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr w 1
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn proc_compare
 | 
						|
was extracted from
 | 
						|
.Pa src/sys/kern/tty.c
 | 
						|
and
 | 
						|
.Pa src/usr.bin/w/proc_compare.c
 | 
						|
and merged in
 | 
						|
.Nx 6.0 .
 |