1.\" $NetBSD: proc_compare.3,v 1.2 2011/10/21 12:58:53 wiz Exp $ 2.\" 3.\" Copyright (c) 2011 The NetBSD Foundation, Inc. 4.\" All rights reserved. 5.\" 6.\" This code is derived from software contributed to The NetBSD Foundation 7.\" by Christos Zoulas. 8.\" 9.\" Redistribution and use in source and binary forms, with or without 10.\" modification, are permitted provided that the following conditions 11.\" are met: 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in the 16.\" documentation and/or other materials provided with the distribution. 17.\" 3. All advertising materials mentioning features or use of this software 18.\" must display the following acknowledgement: 19.\" This product includes software developed by the NetBSD 20.\" Foundation, Inc. and its contributors. 21.\" 4. Neither the name of The NetBSD Foundation nor the names of its 22.\" contributors may be used to endorse or promote products derived 23.\" from this software without specific prior written permission. 24.\" 25.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35.\" POSSIBILITY OF SUCH DAMAGE. 36.\" 37.\" 38.Dd October 20, 2011 39.Dt PROC_COMPARE 3 40.Os 41.Sh NAME 42.Nm proc_compare 43.Nd compare two processes' interactivity 44.Sh LIBRARY 45.Lb libutil 46.Sh SYNOPSIS 47.In sys/sysctl.h 48.Ft int 49.Fn "proc_compare" "const struct kinfo_proc2 *p1" "const struct kinfo_lwp *l1" \ 50"const struct kinfo_proc2 *p2" "const struct kinfo_lwp *l2" 51.Sh DESCRIPTION 52The 53.Fn proc_compare 54function compares two processes that are on the same terminal for their 55interactivity. 56This means that the process returned is the one that has a better chance 57being the active foreground process on that tty. 58This algorithm is used in the kernel for 59.Dv SIGINFO 60reporting and in userland by 61.Xr w 1 . 62.Pp 63The algorithm used is as follows: 64.Bl -bullet -compact -offset indent 65.It 66If one of them is runnable, it is preferred. 67.It 68If both are runnable, the one with the largest CPU percent is preferred. 69.It 70In a CPU percent tie, the one started more recently wins. 71.It 72If none are runnable, and one of them is a zombie, the non-zombie is preferred 73.It 74If both are zombies, the one started more recently wins. 75.It 76If neither is a zombie, the one with the smaller sleep time wins. 77.It 78In a tie, and one is sleeping in non-interruptible sleep, prefer that one. 79.It 80If both are in the same state, the one started more recently is preferred. 81.El 82In all cases where the most recently started wins, if there was no winner, 83the one with the largest PID wins. 84.Sh RETURN VALUES 85The 86.Fn proc_compare 87function returns 88.Dv 0 89if 90.Fa p1 91is to be preferred 92and 93.Dv 1 94if 95.Fa p2 96is to be preferred. 97.Sh SEE ALSO 98.Xr w 1 99.Sh HISTORY 100The 101.Fn proc_compare 102was extracted from 103.Pa src/sys/kern/tty.c 104and 105.Pa src/usr.bin/w/proc_compare.c 106and merged in 107.Nx 6.0 . 108