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