Unleashed v1.4
[unleashed.git] / share / man / man3proc / Pcreate.3proc
blob6185e60d2337458f8aaab5e690e6b6d3a3884db4
1 .\"
2 .\" This file and its contents are supplied under the terms of the
3 .\" Common Development and Distribution License ("CDDL"), version 1.0.
4 .\" You may only use this file in accordance with the terms of version
5 .\" 1.0 of the CDDL.
6 .\"
7 .\" A full copy of the text of the CDDL should have accompanied this
8 .\" source.  A copy of the CDDL is also available via the Internet at
9 .\" http://www.illumos.org/license/CDDL.
10 .\"
11 .\"
12 .\" Copyright 2015 Joyent, Inc.
13 .\"
14 .Dd May 11, 2016
15 .Dt PCREATE 3PROC
16 .Os
17 .Sh NAME
18 .Nm Pcreate ,
19 .Nm Pxcreate ,
20 .Nm Pcreate_callback
21 .Nd create and control a process
22 .Sh SYNOPSIS
23 .Lb libproc
24 .In libproc.h
25 .Ft "struct ps_prochandle *"
26 .Fo Pcreate
27 .Fa "const char *file"
28 .Fa "char *const *argv"
29 .Fa "int *perr"
30 .Fa "char *path"
31 .Fa "size_t len"
32 .Fc
33 .Ft "struct ps_prochandle *"
34 .Fo Pxcreate
35 .Fa "const char *file"
36 .Fa "char *const *argv"
37 .Fa "char *const *envp"
38 .Fa "int *perr"
39 .Fa "char *path"
40 .Fa "size_t len"
41 .Fc
42 .Ft void
43 .Fo Pcreate_callback
44 .Fa "struct ps_prochandle *P"
45 .Fc
46 .Sh DESCRIPTION
47 The
48 .Fn Pcreate
49 function creates a process controlled by the
50 .Sy libproc
51 library.
52 The
53 .Fn Pxcreate
54 function does the same while also allowing the replacement of the
55 environment via
56 .Fa envp .
57 .Pp
58 Both functions cause the caller to
59 .Xr fork 2 .
60 Followed by the child calling
61 .Xr exec 2
62 to load the new process image specified by
63 .Fa file .
64 The
65 .Ev PATH
66 is searched for
67 .Fa file
68 if it is not an absolute path, similar to
69 .Xr execvp 2 .
70 .Pp
71 The process image will be invoked with the arguments specified by
72 .Fa argv ,
73 which should be a
74 .Dv NULL Ns -terminated
75 array of character strings.
76 Each entry in the array is an individual argument.
77 The environment of the process image will be inherited from the running process
78 if the
79 .Fn Pcreate
80 function is called or if the
81 .Fn Pxcreate
82 function is called and the value of
83 .Fa envp
85 .Dv NULL .
86 Otherwise,
87 .Fa envp
88 should be a
89 .Dv NULL Ns -terminated
90 array of character strings whose entries are in the form of
91 .Em key=value .
92 For more on the process environment, see
93 .Xr environ 5 .
94 .Pp
95 The
96 .Fn Pcreate_callback
97 function allows a way for callers to inject a callback into the child
98 process before the call to
99 .Xr exec 2 .
100 The symbol
101 .Sy Pcreate_callback
102 is a symbol that may be interposed on by consumers.
103 It allows the chance for the modification of signal dispositions or any other
104 changes that a caller may wish to make.
106 If the caller's real user or group ID is not their effective user or
107 group ID, then the child process's user and group IDs will all be reset
108 to the real user and group id.
111 .Fa perr
112 argument must be a
113 .Pf non- Dv NULL
114 pointer.
115 If the
116 .Fn Pcreate
118 .Fn Pxcreate
119 functions fail, the value pointed to will be filled in with a more
120 detailed error code listed in
121 .Sx ERRORS .
122 A human-readable error message is obtained with
123 .Xr Pcreate_error 3PROC .
125 Multiple executables named
126 .Fa file
127 may exist on the
128 .Fa PATH .
129 To determine the full path of the executable pass a non-NULL
130 .Fa path
131 pointer.
132 Upon successful completion of
133 .Fn Pcreate
135 .Fn Pxcreate
137 .Fa path
138 pointer will contain the full path up to
139 .Fa len
140 bytes, including the NUL character.
142 Upon successful completion of the
143 .Fn Pcreate
145 .Fn Pxcreate
146 function, a handle to the process is returned.
147 This handle is usable with other
148 .Sy libproc
149 routines and will persist until either
150 .Xr Pfree 3PROC
152 .Xr Prelease 3PROC
153 is called on the resulting handle.
154 The process created is stopped just after return from the
155 .Xr exec 2
156 family of system calls.
157 The process will not run, unless the caller sets it running or releases its
158 handle to the process.
160 A 32-bit process cannot use this interface to launch or control a
161 64-bit process.
162 However, a 64-bit process can create and control both 32-bit and 64-bit
163 processes.
164 .Sh RETURN VALUES
165 Upon successful completion, both the
166 .Fn Pcreate
168 .Fn Pxcreate
169 functions create a new process and return a
170 .Sy libproc
171 handle to it.
172 Otherwise,
173 .Sy NULL
174 is returned and
175 .Fa perr
176 is filled in with the corresponding error.
177 .Sh ERRORS
179 .Fn Pcreate
181 .Fn Pxcreate
182 functions will fail if:
183 .Bl -tag -width Er
184 .It Er C_FORK
185 The call to
186 .Xr fork 2
187 failed.
188 .It Er C_INTR
189 The operation was interrupted by a signal.
190 .It Er C_LP64
191 The calling process is 32-bit, but it attempted to control a 64-bit
192 process.
193 .It Er C_NOEXEC
194 The specified
195 .Fa file
196 or the one found by searching
197 .Dv PATH
198 cannot be executed.
199 .It Er C_NOENT
200 The specified
201 .Fa file
202 does not exist or it could not be found by searching
203 .Dv PATH .
204 .It Er C_PERM
205 The specified
206 .Fa file
207 or the one found by searching
208 .Dv PATH
209 is set-id or unreadable.
210 .It Er C_STRANGE
211 An unanticipated system error occurred while trying to create the
212 process and its handle.
213 When this occurs, then the value of
214 .Sy errno
215 is meaningful.
217 .Xr errno 3C
218 for more information and
219 .Xr Intro 2
220 for the list of possible errors.
222 .Sh INTERFACE STABILITY
223 .Sy Uncommitted
224 .Sh MT-LEVEL
225 .Sy MT-Safe
226 .Sh SEE ALSO
227 .Xr exec 2 ,
228 .Xr execvp 2 ,
229 .Xr fork 2 ,
230 .Xr Intro 2 ,
231 .Xr errno 3C ,
232 .Xr libproc 3LIB ,
233 .Xr Pcreate_error 3PROC ,
234 .Xr Pfree 3PROC ,
235 .Xr Prelease 3PROC