1*8269e767SBrooks Davis.\" 2*8269e767SBrooks Davis.\" Copyright (c) 2009-2010, 2012-2013 Robert N. M. Watson 3*8269e767SBrooks Davis.\" All rights reserved. 4*8269e767SBrooks Davis.\" 5*8269e767SBrooks Davis.\" This software was developed at the University of Cambridge Computer 6*8269e767SBrooks Davis.\" Laboratory with support from a grant from Google, Inc. 7*8269e767SBrooks Davis.\" 8*8269e767SBrooks Davis.\" This software was developed by SRI International and the University of 9*8269e767SBrooks Davis.\" Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) 10*8269e767SBrooks Davis.\" ("CTSRD"), as part of the DARPA CRASH research programme. 11*8269e767SBrooks Davis.\" 12*8269e767SBrooks Davis.\" Redistribution and use in source and binary forms, with or without 13*8269e767SBrooks Davis.\" modification, are permitted provided that the following conditions 14*8269e767SBrooks Davis.\" are met: 15*8269e767SBrooks Davis.\" 1. Redistributions of source code must retain the above copyright 16*8269e767SBrooks Davis.\" notice, this list of conditions and the following disclaimer. 17*8269e767SBrooks Davis.\" 2. Redistributions in binary form must reproduce the above copyright 18*8269e767SBrooks Davis.\" notice, this list of conditions and the following disclaimer in the 19*8269e767SBrooks Davis.\" documentation and/or other materials provided with the distribution. 20*8269e767SBrooks Davis.\" 21*8269e767SBrooks Davis.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 22*8269e767SBrooks Davis.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23*8269e767SBrooks Davis.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24*8269e767SBrooks Davis.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 25*8269e767SBrooks Davis.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26*8269e767SBrooks Davis.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27*8269e767SBrooks Davis.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28*8269e767SBrooks Davis.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29*8269e767SBrooks Davis.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30*8269e767SBrooks Davis.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*8269e767SBrooks Davis.\" SUCH DAMAGE. 32*8269e767SBrooks Davis.\" 33*8269e767SBrooks Davis.Dd October 14, 2018 34*8269e767SBrooks Davis.Dt PDFORK 2 35*8269e767SBrooks Davis.Os 36*8269e767SBrooks Davis.Sh NAME 37*8269e767SBrooks Davis.Nm pdfork , 38*8269e767SBrooks Davis.Nm pdgetpid , 39*8269e767SBrooks Davis.Nm pdkill 40*8269e767SBrooks Davis.Nd System calls to manage process descriptors 41*8269e767SBrooks Davis.Sh LIBRARY 42*8269e767SBrooks Davis.Lb libc 43*8269e767SBrooks Davis.Sh SYNOPSIS 44*8269e767SBrooks Davis.In sys/procdesc.h 45*8269e767SBrooks Davis.Ft pid_t 46*8269e767SBrooks Davis.Fn pdfork "int *fdp" "int flags" 47*8269e767SBrooks Davis.Ft int 48*8269e767SBrooks Davis.Fn pdgetpid "int fd" "pid_t *pidp" 49*8269e767SBrooks Davis.Ft int 50*8269e767SBrooks Davis.Fn pdkill "int fd" "int signum" 51*8269e767SBrooks Davis.Sh DESCRIPTION 52*8269e767SBrooks DavisProcess descriptors are special file descriptors that represent processes, 53*8269e767SBrooks Davisand are created using 54*8269e767SBrooks Davis.Fn pdfork , 55*8269e767SBrooks Davisa variant of 56*8269e767SBrooks Davis.Xr fork 2 , 57*8269e767SBrooks Daviswhich, if successful, returns a process descriptor in the integer pointed to 58*8269e767SBrooks Davisby 59*8269e767SBrooks Davis.Fa fdp . 60*8269e767SBrooks DavisProcesses created via 61*8269e767SBrooks Davis.Fn pdfork 62*8269e767SBrooks Daviswill not cause 63*8269e767SBrooks Davis.Dv SIGCHLD 64*8269e767SBrooks Davison termination. 65*8269e767SBrooks Davis.Fn pdfork 66*8269e767SBrooks Daviscan accept the flags: 67*8269e767SBrooks Davis.Bl -tag -width ".Dv PD_DAEMON" 68*8269e767SBrooks Davis.It Dv PD_DAEMON 69*8269e767SBrooks DavisInstead of the default terminate-on-close behaviour, allow the process to 70*8269e767SBrooks Davislive until it is explicitly killed with 71*8269e767SBrooks Davis.Xr kill 2 . 72*8269e767SBrooks Davis.Pp 73*8269e767SBrooks DavisThis option is not permitted in 74*8269e767SBrooks Davis.Xr capsicum 4 75*8269e767SBrooks Daviscapability mode (see 76*8269e767SBrooks Davis.Xr cap_enter 2 ) . 77*8269e767SBrooks Davis.El 78*8269e767SBrooks Davis.Bl -tag -width ".Dv PD_DAEMON" 79*8269e767SBrooks Davis.It Dv PD_CLOEXEC 80*8269e767SBrooks DavisSet close-on-exec on process descriptor. 81*8269e767SBrooks Davis.El 82*8269e767SBrooks Davis.Pp 83*8269e767SBrooks Davis.Fn pdgetpid 84*8269e767SBrooks Davisqueries the process ID (PID) in the process descriptor 85*8269e767SBrooks Davis.Fa fd . 86*8269e767SBrooks Davis.Pp 87*8269e767SBrooks Davis.Fn pdkill 88*8269e767SBrooks Davisis functionally identical to 89*8269e767SBrooks Davis.Xr kill 2 , 90*8269e767SBrooks Davisexcept that it accepts a process descriptor, 91*8269e767SBrooks Davis.Fa fd , 92*8269e767SBrooks Davisrather than a PID. 93*8269e767SBrooks Davis.Pp 94*8269e767SBrooks DavisThe following system calls also have effects specific to process descriptors: 95*8269e767SBrooks Davis.Pp 96*8269e767SBrooks Davis.Xr fstat 2 97*8269e767SBrooks Davisqueries status of a process descriptor; currently only the 98*8269e767SBrooks Davis.Fa st_mode , 99*8269e767SBrooks Davis.Fa st_birthtime , 100*8269e767SBrooks Davis.Fa st_atime , 101*8269e767SBrooks Davis.Fa st_ctime 102*8269e767SBrooks Davisand 103*8269e767SBrooks Davis.Fa st_mtime 104*8269e767SBrooks Davisfields are defined. 105*8269e767SBrooks DavisIf the owner read, write, and execute bits are set then the 106*8269e767SBrooks Davisprocess represented by the process descriptor is still alive. 107*8269e767SBrooks Davis.Pp 108*8269e767SBrooks Davis.Xr poll 2 109*8269e767SBrooks Davisand 110*8269e767SBrooks Davis.Xr select 2 111*8269e767SBrooks Davisallow waiting for process state transitions; currently only 112*8269e767SBrooks Davis.Dv POLLHUP 113*8269e767SBrooks Davisis defined, and will be raised when the process dies. 114*8269e767SBrooks DavisProcess state transitions can also be monitored using 115*8269e767SBrooks Davis.Xr kqueue 2 116*8269e767SBrooks Davisfilter 117*8269e767SBrooks Davis.Dv EVFILT_PROCDESC ; 118*8269e767SBrooks Daviscurrently only 119*8269e767SBrooks Davis.Dv NOTE_EXIT 120*8269e767SBrooks Davisis implemented. 121*8269e767SBrooks Davis.Pp 122*8269e767SBrooks Davis.Xr close 2 123*8269e767SBrooks Daviswill close the process descriptor unless 124*8269e767SBrooks Davis.Dv PD_DAEMON 125*8269e767SBrooks Davisis set; if the process is still alive and this is 126*8269e767SBrooks Davisthe last reference to the process descriptor, the process will be terminated 127*8269e767SBrooks Daviswith the signal 128*8269e767SBrooks Davis.Dv SIGKILL . 129*8269e767SBrooks Davis.Sh RETURN VALUES 130*8269e767SBrooks Davis.Fn pdfork 131*8269e767SBrooks Davisreturns a PID, 0 or -1, as 132*8269e767SBrooks Davis.Xr fork 2 133*8269e767SBrooks Davisdoes. 134*8269e767SBrooks Davis.Pp 135*8269e767SBrooks Davis.Fn pdgetpid 136*8269e767SBrooks Davisand 137*8269e767SBrooks Davis.Fn pdkill 138*8269e767SBrooks Davisreturn 0 on success and -1 on failure. 139*8269e767SBrooks Davis.Sh ERRORS 140*8269e767SBrooks DavisThese functions may return the same error numbers as their PID-based equivalents 141*8269e767SBrooks Davis(e.g. 142*8269e767SBrooks Davis.Fn pdfork 143*8269e767SBrooks Davismay return the same error numbers as 144*8269e767SBrooks Davis.Xr fork 2 ) , 145*8269e767SBrooks Daviswith the following additions: 146*8269e767SBrooks Davis.Bl -tag -width Er 147*8269e767SBrooks Davis.It Bq Er EINVAL 148*8269e767SBrooks DavisThe signal number given to 149*8269e767SBrooks Davis.Fn pdkill 150*8269e767SBrooks Davisis invalid. 151*8269e767SBrooks Davis.It Bq Er ENOTCAPABLE 152*8269e767SBrooks DavisThe process descriptor being operated on has insufficient rights (e.g. 153*8269e767SBrooks Davis.Dv CAP_PDKILL 154*8269e767SBrooks Davisfor 155*8269e767SBrooks Davis.Fn pdkill ) . 156*8269e767SBrooks Davis.El 157*8269e767SBrooks Davis.Sh SEE ALSO 158*8269e767SBrooks Davis.Xr close 2 , 159*8269e767SBrooks Davis.Xr fork 2 , 160*8269e767SBrooks Davis.Xr fstat 2 , 161*8269e767SBrooks Davis.Xr kill 2 , 162*8269e767SBrooks Davis.Xr kqueue 2 , 163*8269e767SBrooks Davis.Xr poll 2 , 164*8269e767SBrooks Davis.Xr wait4 2 , 165*8269e767SBrooks Davis.Xr capsicum 4 , 166*8269e767SBrooks Davis.Xr procdesc 4 167*8269e767SBrooks Davis.Sh HISTORY 168*8269e767SBrooks DavisThe 169*8269e767SBrooks Davis.Fn pdfork , 170*8269e767SBrooks Davis.Fn pdgetpid , 171*8269e767SBrooks Davisand 172*8269e767SBrooks Davis.Fn pdkill 173*8269e767SBrooks Davissystem calls first appeared in 174*8269e767SBrooks Davis.Fx 9.0 . 175*8269e767SBrooks Davis.Pp 176*8269e767SBrooks DavisSupport for process descriptors mode was developed as part of the 177*8269e767SBrooks Davis.Tn TrustedBSD 178*8269e767SBrooks DavisProject. 179*8269e767SBrooks Davis.Sh AUTHORS 180*8269e767SBrooks Davis.An -nosplit 181*8269e767SBrooks DavisThese functions and the capability facility were created by 182*8269e767SBrooks Davis.An Robert N. M. Watson Aq Mt rwatson@FreeBSD.org 183*8269e767SBrooks Davisand 184*8269e767SBrooks Davis.An Jonathan Anderson Aq Mt jonathan@FreeBSD.org 185*8269e767SBrooks Davisat the University of Cambridge Computer Laboratory with support from a grant 186*8269e767SBrooks Davisfrom Google, Inc. 187