xref: /freebsd/lib/libsys/pdfork.2 (revision 8269e7673cf033aba67dab8264fe719920c70f87)
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