1*9da22751SDavid van Moolenbroek.\" $NetBSD: kvm_getprocs.3,v 1.15 2009/03/10 23:49:07 joerg Exp $ 2*9da22751SDavid van Moolenbroek.\" 3*9da22751SDavid van Moolenbroek.\" Copyright (c) 1992, 1993 4*9da22751SDavid van Moolenbroek.\" The Regents of the University of California. All rights reserved. 5*9da22751SDavid van Moolenbroek.\" 6*9da22751SDavid van Moolenbroek.\" This code is derived from software developed by the Computer Systems 7*9da22751SDavid van Moolenbroek.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract 8*9da22751SDavid van Moolenbroek.\" BG 91-66 and contributed to Berkeley. 9*9da22751SDavid van Moolenbroek.\" 10*9da22751SDavid van Moolenbroek.\" Redistribution and use in source and binary forms, with or without 11*9da22751SDavid van Moolenbroek.\" modification, are permitted provided that the following conditions 12*9da22751SDavid van Moolenbroek.\" are met: 13*9da22751SDavid van Moolenbroek.\" 1. Redistributions of source code must retain the above copyright 14*9da22751SDavid van Moolenbroek.\" notice, this list of conditions and the following disclaimer. 15*9da22751SDavid van Moolenbroek.\" 2. Redistributions in binary form must reproduce the above copyright 16*9da22751SDavid van Moolenbroek.\" notice, this list of conditions and the following disclaimer in the 17*9da22751SDavid van Moolenbroek.\" documentation and/or other materials provided with the distribution. 18*9da22751SDavid van Moolenbroek.\" 3. Neither the name of the University nor the names of its contributors 19*9da22751SDavid van Moolenbroek.\" may be used to endorse or promote products derived from this software 20*9da22751SDavid van Moolenbroek.\" without specific prior written permission. 21*9da22751SDavid van Moolenbroek.\" 22*9da22751SDavid van Moolenbroek.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*9da22751SDavid van Moolenbroek.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*9da22751SDavid van Moolenbroek.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*9da22751SDavid van Moolenbroek.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*9da22751SDavid van Moolenbroek.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*9da22751SDavid van Moolenbroek.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*9da22751SDavid van Moolenbroek.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*9da22751SDavid van Moolenbroek.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*9da22751SDavid van Moolenbroek.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*9da22751SDavid van Moolenbroek.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*9da22751SDavid van Moolenbroek.\" SUCH DAMAGE. 33*9da22751SDavid van Moolenbroek.\" 34*9da22751SDavid van Moolenbroek.\" @(#)kvm_getprocs.3 8.1 (Berkeley) 6/4/93 35*9da22751SDavid van Moolenbroek.\" 36*9da22751SDavid van Moolenbroek.Dd February 10, 2004 37*9da22751SDavid van Moolenbroek.Dt KVM_GETPROCS 3 38*9da22751SDavid van Moolenbroek.Os 39*9da22751SDavid van Moolenbroek.Sh NAME 40*9da22751SDavid van Moolenbroek.Nm kvm_getprocs , 41*9da22751SDavid van Moolenbroek.Nm kvm_getargv , 42*9da22751SDavid van Moolenbroek.Nm kvm_getenvv 43*9da22751SDavid van Moolenbroek.Nd access user process state 44*9da22751SDavid van Moolenbroek.Sh LIBRARY 45*9da22751SDavid van Moolenbroek.Lb libkvm 46*9da22751SDavid van Moolenbroek.Sh SYNOPSIS 47*9da22751SDavid van Moolenbroek.In kvm.h 48*9da22751SDavid van Moolenbroek.In sys/param.h 49*9da22751SDavid van Moolenbroek.In sys/sysctl.h 50*9da22751SDavid van Moolenbroek.\" .Fa kvm_t *kd 51*9da22751SDavid van Moolenbroek.Ft struct kinfo_proc * 52*9da22751SDavid van Moolenbroek.Fn kvm_getprocs "kvm_t *kd" "int op" "int arg" "int *cnt" 53*9da22751SDavid van Moolenbroek.Ft char ** 54*9da22751SDavid van Moolenbroek.Fn kvm_getargv "kvm_t *kd" "const struct kinfo_proc *p" "int nchr" 55*9da22751SDavid van Moolenbroek.Ft char ** 56*9da22751SDavid van Moolenbroek.Fn kvm_getenvv "kvm_t *kd" "const struct kinfo_proc *p" "int nchr" 57*9da22751SDavid van Moolenbroek.Ft struct kinfo_proc2 * 58*9da22751SDavid van Moolenbroek.Fn kvm_getproc2 "kvm_t *kd" "int op" "int arg" "int elemsize" "int *cnt" 59*9da22751SDavid van Moolenbroek.Ft char ** 60*9da22751SDavid van Moolenbroek.Fn kvm_getargv2 "kvm_t *kd" "const struct kinfo_proc2 *p" "int nchr" 61*9da22751SDavid van Moolenbroek.Ft char ** 62*9da22751SDavid van Moolenbroek.Fn kvm_getenvv2 "kvm_t *kd" "const struct kinfo_proc2 *p" "int nchr" 63*9da22751SDavid van Moolenbroek.Sh DESCRIPTION 64*9da22751SDavid van Moolenbroek.Fn kvm_getprocs 65*9da22751SDavid van Moolenbroekreturns a (sub-)set of active processes in the kernel indicated by 66*9da22751SDavid van Moolenbroek.Fa kd . 67*9da22751SDavid van MoolenbroekThe 68*9da22751SDavid van Moolenbroek.Fa op 69*9da22751SDavid van Moolenbroekand 70*9da22751SDavid van Moolenbroek.Fa arg 71*9da22751SDavid van Moolenbroekarguments constitute a predicate 72*9da22751SDavid van Moolenbroekwhich limits the set of processes returned. 73*9da22751SDavid van MoolenbroekThe value of 74*9da22751SDavid van Moolenbroek.Fa op 75*9da22751SDavid van Moolenbroekdescribes the filtering predicate as follows: 76*9da22751SDavid van Moolenbroek.Pp 77*9da22751SDavid van Moolenbroek.Bl -tag -width 20n -offset indent -compact 78*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_ALL 79*9da22751SDavid van Moolenbroekall processes 80*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_PID 81*9da22751SDavid van Moolenbroekprocesses with process id 82*9da22751SDavid van Moolenbroek.Fa arg 83*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_PGRP 84*9da22751SDavid van Moolenbroekprocesses with process group 85*9da22751SDavid van Moolenbroek.Fa arg 86*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_SESSION 87*9da22751SDavid van Moolenbroekprocesses with session id 88*9da22751SDavid van Moolenbroek.Fa arg 89*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_TTY 90*9da22751SDavid van Moolenbroekprocesses with tty device 91*9da22751SDavid van Moolenbroek.Fa arg 92*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_UID 93*9da22751SDavid van Moolenbroekprocesses with effective user id 94*9da22751SDavid van Moolenbroek.Fa arg 95*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_RUID 96*9da22751SDavid van Moolenbroekprocesses with real user id 97*9da22751SDavid van Moolenbroek.Fa arg 98*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_GID 99*9da22751SDavid van Moolenbroekprocesses with effective group id 100*9da22751SDavid van Moolenbroek.Fa arg 101*9da22751SDavid van Moolenbroek.It Sy KERN_PROC_RGID 102*9da22751SDavid van Moolenbroekprocesses with real group id 103*9da22751SDavid van Moolenbroek.Fa arg 104*9da22751SDavid van Moolenbroek.El 105*9da22751SDavid van Moolenbroek.Pp 106*9da22751SDavid van MoolenbroekThe number of processes found is returned in the reference parameter 107*9da22751SDavid van Moolenbroek.Fa cnt . 108*9da22751SDavid van MoolenbroekThe processes are returned as a contiguous array of 109*9da22751SDavid van Moolenbroek.Sy kinfo_proc 110*9da22751SDavid van Moolenbroekstructures. 111*9da22751SDavid van MoolenbroekThis memory is locally allocated, and subsequent calls to 112*9da22751SDavid van Moolenbroek.Fn kvm_getprocs 113*9da22751SDavid van Moolenbroekand 114*9da22751SDavid van Moolenbroek.Fn kvm_close 115*9da22751SDavid van Moolenbroekwill overwrite this storage. 116*9da22751SDavid van Moolenbroek.Pp 117*9da22751SDavid van MoolenbroekIf the 118*9da22751SDavid van Moolenbroek.Fa op 119*9da22751SDavid van Moolenbroekargument for 120*9da22751SDavid van Moolenbroek.Fn kvm_getprocs 121*9da22751SDavid van Moolenbroekis 122*9da22751SDavid van Moolenbroek.Sy KERN_PROC_TTY , 123*9da22751SDavid van Moolenbroek.Fa arg 124*9da22751SDavid van Moolenbroekcan also be 125*9da22751SDavid van Moolenbroek.Sy KERN_PROC_TTY_NODEV 126*9da22751SDavid van Moolenbroekto select processes with no controlling tty and 127*9da22751SDavid van Moolenbroek.Sy KERN_PROC_TTY_REVOKE 128*9da22751SDavid van Moolenbroekto select processes which have had their controlling tty 129*9da22751SDavid van Moolenbroekrevoked. 130*9da22751SDavid van Moolenbroek.Pp 131*9da22751SDavid van Moolenbroek.Fn kvm_getargv 132*9da22751SDavid van Moolenbroekreturns a null-terminated argument vector that corresponds to the 133*9da22751SDavid van Moolenbroekcommand line arguments passed to process indicated by 134*9da22751SDavid van Moolenbroek.Fa p . 135*9da22751SDavid van MoolenbroekMost likely, these arguments correspond to the values passed to 136*9da22751SDavid van Moolenbroek.Xr exec 3 137*9da22751SDavid van Moolenbroekon process creation. 138*9da22751SDavid van MoolenbroekThis information is, however, 139*9da22751SDavid van Moolenbroekdeliberately under control of the process itself. 140*9da22751SDavid van MoolenbroekNote that the original command name can be found, unaltered, 141*9da22751SDavid van Moolenbroekin the p_comm field of the process structure returned by 142*9da22751SDavid van Moolenbroek.Fn kvm_getprocs . 143*9da22751SDavid van Moolenbroek.Pp 144*9da22751SDavid van MoolenbroekThe 145*9da22751SDavid van Moolenbroek.Fa nchr 146*9da22751SDavid van Moolenbroekargument indicates the maximum number of characters, including null bytes, 147*9da22751SDavid van Moolenbroekto use in building the strings. 148*9da22751SDavid van MoolenbroekIf this amount is exceeded, the string 149*9da22751SDavid van Moolenbroekcausing the overflow is truncated and the partial result is returned. 150*9da22751SDavid van MoolenbroekThis is handy for programs like 151*9da22751SDavid van Moolenbroek.Xr ps 1 152*9da22751SDavid van Moolenbroekand 153*9da22751SDavid van Moolenbroek.Xr w 1 154*9da22751SDavid van Moolenbroekthat print only a one line summary of a command and should not copy 155*9da22751SDavid van Moolenbroekout large amounts of text only to ignore it. 156*9da22751SDavid van MoolenbroekIf 157*9da22751SDavid van Moolenbroek.Fa nchr 158*9da22751SDavid van Moolenbroekis zero, no limit is imposed and all argument strings are returned in 159*9da22751SDavid van Moolenbroektheir entirety. 160*9da22751SDavid van Moolenbroek.Pp 161*9da22751SDavid van MoolenbroekThe memory allocated to the argv pointers and string storage 162*9da22751SDavid van Moolenbroekis owned by the kvm library. 163*9da22751SDavid van MoolenbroekSubsequent 164*9da22751SDavid van Moolenbroek.Fn kvm_getprocs 165*9da22751SDavid van Moolenbroekand 166*9da22751SDavid van Moolenbroek.Xr kvm_close 3 167*9da22751SDavid van Moolenbroekcalls will clobber this storage. 168*9da22751SDavid van Moolenbroek.Pp 169*9da22751SDavid van MoolenbroekThe 170*9da22751SDavid van Moolenbroek.Fn kvm_getenvv 171*9da22751SDavid van Moolenbroekfunction is similar to 172*9da22751SDavid van Moolenbroek.Fn kvm_getargv 173*9da22751SDavid van Moolenbroekbut returns the vector of environment strings. 174*9da22751SDavid van MoolenbroekThis data is also alterable by the process. 175*9da22751SDavid van Moolenbroek.Pp 176*9da22751SDavid van Moolenbroek.Fn kvm_getproc2 177*9da22751SDavid van Moolenbroekis similar to 178*9da22751SDavid van Moolenbroek.Fn kvm_getprocs 179*9da22751SDavid van Moolenbroekbut returns an array of 180*9da22751SDavid van Moolenbroek.Sy kinfo_proc2 181*9da22751SDavid van Moolenbroekstructures. 182*9da22751SDavid van MoolenbroekAdditionally, only the first 183*9da22751SDavid van Moolenbroek.Fa elemsize 184*9da22751SDavid van Moolenbroekbytes of each array entry are returned. 185*9da22751SDavid van MoolenbroekIf the size of the 186*9da22751SDavid van Moolenbroek.Sy kinfo_proc2 187*9da22751SDavid van Moolenbroekstructure increases in size in a future release of 188*9da22751SDavid van Moolenbroek.Nx 189*9da22751SDavid van Moolenbroekthe kernel will only return the requested amount of data for 190*9da22751SDavid van Moolenbroekeach array entry and programs that use 191*9da22751SDavid van Moolenbroek.Fn kvm_getproc2 192*9da22751SDavid van Moolenbroekwill continue to function without the need for recompilation. 193*9da22751SDavid van Moolenbroek.Pp 194*9da22751SDavid van MoolenbroekThe 195*9da22751SDavid van Moolenbroek.Fn kvm_getargv2 196*9da22751SDavid van Moolenbroekand 197*9da22751SDavid van Moolenbroek.Fn kvm_getenvv2 198*9da22751SDavid van Moolenbroekare equivalents to the 199*9da22751SDavid van Moolenbroek.Fn kvm_getargv 200*9da22751SDavid van Moolenbroekand 201*9da22751SDavid van Moolenbroek.Fn kvm_getenvv 202*9da22751SDavid van Moolenbroekfunctions but use a 203*9da22751SDavid van Moolenbroek.Sy kinfo_proc2 204*9da22751SDavid van Moolenbroekstructure to specify the process. 205*9da22751SDavid van Moolenbroek.Pp 206*9da22751SDavid van MoolenbroekIf called against an active kernel, the 207*9da22751SDavid van Moolenbroek.Fn kvm_getproc2 , 208*9da22751SDavid van Moolenbroek.Fn kvm_getargv2 , 209*9da22751SDavid van Moolenbroekand 210*9da22751SDavid van Moolenbroek.Fn kvm_getenvv2 211*9da22751SDavid van Moolenbroekfunctions will use the 212*9da22751SDavid van Moolenbroek.Xr sysctl 3 213*9da22751SDavid van Moolenbroekinterface and do not require access to the kernel memory device 214*9da22751SDavid van Moolenbroekfile or swap device. 215*9da22751SDavid van Moolenbroek.Sh RETURN VALUES 216*9da22751SDavid van Moolenbroek.Fn kvm_getprocs , 217*9da22751SDavid van Moolenbroek.Fn kvm_getargv , 218*9da22751SDavid van Moolenbroek.Fn kvm_getenvv , 219*9da22751SDavid van Moolenbroek.Fn kvm_getproc2 , 220*9da22751SDavid van Moolenbroek.Fn kvm_getargv2 , 221*9da22751SDavid van Moolenbroekand 222*9da22751SDavid van Moolenbroek.Fn kvm_getenvv2 223*9da22751SDavid van Moolenbroekall return 224*9da22751SDavid van Moolenbroek.Dv NULL 225*9da22751SDavid van Moolenbroekon failure. 226*9da22751SDavid van Moolenbroek.Sh SEE ALSO 227*9da22751SDavid van Moolenbroek.Xr kvm 3 , 228*9da22751SDavid van Moolenbroek.Xr kvm_close 3 , 229*9da22751SDavid van Moolenbroek.Xr kvm_geterr 3 , 230*9da22751SDavid van Moolenbroek.Xr kvm_nlist 3 , 231*9da22751SDavid van Moolenbroek.Xr kvm_open 3 , 232*9da22751SDavid van Moolenbroek.Xr kvm_openfiles 3 , 233*9da22751SDavid van Moolenbroek.Xr kvm_read 3 , 234*9da22751SDavid van Moolenbroek.Xr kvm_write 3 235*9da22751SDavid van Moolenbroek.Sh BUGS 236*9da22751SDavid van MoolenbroekThese routines do not belong in the kvm interface. 237