143051d27SRobert Mustacchi.\" 243051d27SRobert Mustacchi.\" This file and its contents are supplied under the terms of the 343051d27SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 443051d27SRobert Mustacchi.\" You may only use this file in accordance with the terms of version 543051d27SRobert Mustacchi.\" 1.0 of the CDDL. 643051d27SRobert Mustacchi.\" 743051d27SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 843051d27SRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 943051d27SRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 1043051d27SRobert Mustacchi.\" 1143051d27SRobert Mustacchi.\" 1243051d27SRobert Mustacchi.\" Copyright 2015 Joyent, Inc. 1343051d27SRobert Mustacchi.\" 1443051d27SRobert Mustacchi.Dd May 11, 2016 1543051d27SRobert Mustacchi.Dt PCREATE 3PROC 1643051d27SRobert Mustacchi.Os 1743051d27SRobert Mustacchi.Sh NAME 1843051d27SRobert Mustacchi.Nm Pcreate , 1943051d27SRobert Mustacchi.Nm Pxcreate , 2043051d27SRobert Mustacchi.Nm Pcreate_callback 2143051d27SRobert Mustacchi.Nd create and control a process 22ab618543SJohn Levon.Sh LIBRARY 2343051d27SRobert Mustacchi.Lb libproc 24ab618543SJohn Levon.Sh SYNOPSIS 2543051d27SRobert Mustacchi.In libproc.h 2643051d27SRobert Mustacchi.Ft "struct ps_prochandle *" 2743051d27SRobert Mustacchi.Fo Pcreate 2843051d27SRobert Mustacchi.Fa "const char *file" 2943051d27SRobert Mustacchi.Fa "char *const *argv" 3043051d27SRobert Mustacchi.Fa "int *perr" 3143051d27SRobert Mustacchi.Fa "char *path" 3243051d27SRobert Mustacchi.Fa "size_t len" 3343051d27SRobert Mustacchi.Fc 3443051d27SRobert Mustacchi.Ft "struct ps_prochandle *" 3543051d27SRobert Mustacchi.Fo Pxcreate 3643051d27SRobert Mustacchi.Fa "const char *file" 3743051d27SRobert Mustacchi.Fa "char *const *argv" 3843051d27SRobert Mustacchi.Fa "char *const *envp" 3943051d27SRobert Mustacchi.Fa "int *perr" 4043051d27SRobert Mustacchi.Fa "char *path" 4143051d27SRobert Mustacchi.Fa "size_t len" 4243051d27SRobert Mustacchi.Fc 4343051d27SRobert Mustacchi.Ft void 4443051d27SRobert Mustacchi.Fo Pcreate_callback 4543051d27SRobert Mustacchi.Fa "struct ps_prochandle *P" 4643051d27SRobert Mustacchi.Fc 4743051d27SRobert Mustacchi.Sh DESCRIPTION 4843051d27SRobert MustacchiThe 4943051d27SRobert Mustacchi.Fn Pcreate 5043051d27SRobert Mustacchifunction creates a process controlled by the 5143051d27SRobert Mustacchi.Sy libproc 5272d3dbb9SYuri Pankovlibrary. 5372d3dbb9SYuri PankovThe 5443051d27SRobert Mustacchi.Fn Pxcreate 5543051d27SRobert Mustacchifunction does the same while also allowing the replacement of the 5643051d27SRobert Mustacchienvironment via 5743051d27SRobert Mustacchi.Fa envp . 5843051d27SRobert Mustacchi.Pp 5943051d27SRobert MustacchiBoth functions cause the caller to 6043051d27SRobert Mustacchi.Xr fork 2 . 6143051d27SRobert MustacchiFollowed by the child calling 6243051d27SRobert Mustacchi.Xr exec 2 6343051d27SRobert Mustacchito load the new process image specified by 6443051d27SRobert Mustacchi.Fa file . 6543051d27SRobert MustacchiThe 6643051d27SRobert Mustacchi.Ev PATH 6743051d27SRobert Mustacchiis searched for 6843051d27SRobert Mustacchi.Fa file 6943051d27SRobert Mustacchiif it is not an absolute path, similar to 7043051d27SRobert Mustacchi.Xr execvp 2 . 7143051d27SRobert Mustacchi.Pp 7243051d27SRobert MustacchiThe process image will be invoked with the arguments specified by 7343051d27SRobert Mustacchi.Fa argv , 7443051d27SRobert Mustacchiwhich should be a 7543051d27SRobert Mustacchi.Dv NULL Ns -terminated 7672d3dbb9SYuri Pankovarray of character strings. 7772d3dbb9SYuri PankovEach entry in the array is an individual argument. 7872d3dbb9SYuri PankovThe environment of the process image will be inherited from the running process 7972d3dbb9SYuri Pankovif the 8043051d27SRobert Mustacchi.Fn Pcreate 8143051d27SRobert Mustacchifunction is called or if the 8243051d27SRobert Mustacchi.Fn Pxcreate 8343051d27SRobert Mustacchifunction is called and the value of 8443051d27SRobert Mustacchi.Fa envp 8543051d27SRobert Mustacchiis 8643051d27SRobert Mustacchi.Dv NULL . 8743051d27SRobert MustacchiOtherwise, 8843051d27SRobert Mustacchi.Fa envp 8943051d27SRobert Mustacchishould be a 9043051d27SRobert Mustacchi.Dv NULL Ns -terminated 9143051d27SRobert Mustacchiarray of character strings whose entries are in the form of 9243051d27SRobert Mustacchi.Em key=value . 9343051d27SRobert MustacchiFor more on the process environment, see 94*bbf21555SRichard Lowe.Xr environ 7 . 9543051d27SRobert Mustacchi.Pp 9643051d27SRobert MustacchiThe 9743051d27SRobert Mustacchi.Fn Pcreate_callback 9843051d27SRobert Mustacchifunction allows a way for callers to inject a callback into the child 9943051d27SRobert Mustacchiprocess before the call to 10043051d27SRobert Mustacchi.Xr exec 2 . 10143051d27SRobert MustacchiThe symbol 10243051d27SRobert Mustacchi.Sy Pcreate_callback 10372d3dbb9SYuri Pankovis a symbol that may be interposed on by consumers. 10472d3dbb9SYuri PankovIt allows the chance for the modification of signal dispositions or any other 10572d3dbb9SYuri Pankovchanges that a caller may wish to make. 10643051d27SRobert Mustacchi.Pp 10743051d27SRobert MustacchiIf the caller's real user or group ID is not their effective user or 10843051d27SRobert Mustacchigroup ID, then the child process's user and group IDs will all be reset 10943051d27SRobert Mustacchito the real user and group id. 11043051d27SRobert Mustacchi.Pp 11143051d27SRobert MustacchiThe 11243051d27SRobert Mustacchi.Fa perr 11343051d27SRobert Mustacchiargument must be a 11443051d27SRobert Mustacchi.Pf non- Dv NULL 11572d3dbb9SYuri Pankovpointer. 11672d3dbb9SYuri PankovIf the 11743051d27SRobert Mustacchi.Fn Pcreate 11843051d27SRobert Mustacchior 11943051d27SRobert Mustacchi.Fn Pxcreate 12043051d27SRobert Mustacchifunctions fail, the value pointed to will be filled in with a more 12143051d27SRobert Mustacchidetailed error code listed in 12243051d27SRobert Mustacchi.Sx ERRORS . 12343051d27SRobert MustacchiA human-readable error message is obtained with 12443051d27SRobert Mustacchi.Xr Pcreate_error 3PROC . 12543051d27SRobert Mustacchi.Pp 12643051d27SRobert MustacchiMultiple executables named 12743051d27SRobert Mustacchi.Fa file 12843051d27SRobert Mustacchimay exist on the 12943051d27SRobert Mustacchi.Fa PATH . 13043051d27SRobert MustacchiTo determine the full path of the executable pass a non-NULL 13143051d27SRobert Mustacchi.Fa path 13272d3dbb9SYuri Pankovpointer. 13372d3dbb9SYuri PankovUpon successful completion of 13443051d27SRobert Mustacchi.Fn Pcreate 13543051d27SRobert Mustacchior 13643051d27SRobert Mustacchi.Fn Pxcreate 13743051d27SRobert Mustacchithe 13843051d27SRobert Mustacchi.Fa path 13943051d27SRobert Mustacchipointer will contain the full path up to 14043051d27SRobert Mustacchi.Fa len 14143051d27SRobert Mustacchibytes, including the NUL character. 14243051d27SRobert Mustacchi.Pp 14343051d27SRobert MustacchiUpon successful completion of the 14443051d27SRobert Mustacchi.Fn Pcreate 14543051d27SRobert Mustacchior 14643051d27SRobert Mustacchi.Fn Pxcreate 14772d3dbb9SYuri Pankovfunction, a handle to the process is returned. 14872d3dbb9SYuri PankovThis handle is usable with other 14943051d27SRobert Mustacchi.Sy libproc 15043051d27SRobert Mustacchiroutines and will persist until either 15143051d27SRobert Mustacchi.Xr Pfree 3PROC 15243051d27SRobert Mustacchior 15343051d27SRobert Mustacchi.Xr Prelease 3PROC 15472d3dbb9SYuri Pankovis called on the resulting handle. 15572d3dbb9SYuri PankovThe process created is stopped just after return from the 15643051d27SRobert Mustacchi.Xr exec 2 15772d3dbb9SYuri Pankovfamily of system calls. 15872d3dbb9SYuri PankovThe process will not run, unless the caller sets it running or releases its 15972d3dbb9SYuri Pankovhandle to the process. 16043051d27SRobert Mustacchi.Pp 16143051d27SRobert MustacchiA 32-bit process cannot use this interface to launch or control a 16272d3dbb9SYuri Pankov64-bit process. 16372d3dbb9SYuri PankovHowever, a 64-bit process can create and control both 32-bit and 64-bit 16472d3dbb9SYuri Pankovprocesses. 16543051d27SRobert Mustacchi.Sh RETURN VALUES 16643051d27SRobert MustacchiUpon successful completion, both the 16743051d27SRobert Mustacchi.Fn Pcreate 16843051d27SRobert Mustacchiand 16943051d27SRobert Mustacchi.Fn Pxcreate 17043051d27SRobert Mustacchifunctions create a new process and return a 17143051d27SRobert Mustacchi.Sy libproc 17272d3dbb9SYuri Pankovhandle to it. 17372d3dbb9SYuri PankovOtherwise, 17443051d27SRobert Mustacchi.Sy NULL 17543051d27SRobert Mustacchiis returned and 17643051d27SRobert Mustacchi.Fa perr 17743051d27SRobert Mustacchiis filled in with the corresponding error. 17843051d27SRobert Mustacchi.Sh ERRORS 17943051d27SRobert MustacchiThe 18043051d27SRobert Mustacchi.Fn Pcreate 18143051d27SRobert Mustacchiand 18243051d27SRobert Mustacchi.Fn Pxcreate 18343051d27SRobert Mustacchifunctions will fail if: 18443051d27SRobert Mustacchi.Bl -tag -width Er 18543051d27SRobert Mustacchi.It Er C_FORK 18643051d27SRobert MustacchiThe call to 18743051d27SRobert Mustacchi.Xr fork 2 18843051d27SRobert Mustacchifailed. 18943051d27SRobert Mustacchi.It Er C_INTR 19043051d27SRobert MustacchiThe operation was interrupted by a signal. 19143051d27SRobert Mustacchi.It Er C_LP64 19243051d27SRobert MustacchiThe calling process is 32-bit, but it attempted to control a 64-bit 19343051d27SRobert Mustacchiprocess. 19443051d27SRobert Mustacchi.It Er C_NOEXEC 19543051d27SRobert MustacchiThe specified 19643051d27SRobert Mustacchi.Fa file 19743051d27SRobert Mustacchior the one found by searching 19843051d27SRobert Mustacchi.Dv PATH 19943051d27SRobert Mustacchicannot be executed. 20043051d27SRobert Mustacchi.It Er C_NOENT 20143051d27SRobert MustacchiThe specified 20243051d27SRobert Mustacchi.Fa file 20343051d27SRobert Mustacchidoes not exist or it could not be found by searching 20443051d27SRobert Mustacchi.Dv PATH . 20543051d27SRobert Mustacchi.It Er C_PERM 20643051d27SRobert MustacchiThe specified 20743051d27SRobert Mustacchi.Fa file 20843051d27SRobert Mustacchior the one found by searching 20943051d27SRobert Mustacchi.Dv PATH 21043051d27SRobert Mustacchiis set-id or unreadable. 21143051d27SRobert Mustacchi.It Er C_STRANGE 21243051d27SRobert MustacchiAn unanticipated system error occurred while trying to create the 21372d3dbb9SYuri Pankovprocess and its handle. 21472d3dbb9SYuri PankovWhen this occurs, then the value of 21543051d27SRobert Mustacchi.Sy errno 21672d3dbb9SYuri Pankovis meaningful. 21772d3dbb9SYuri PankovSee 21843051d27SRobert Mustacchi.Xr errno 3C 21943051d27SRobert Mustacchifor more information and 22043051d27SRobert Mustacchi.Xr Intro 2 22143051d27SRobert Mustacchifor the list of possible errors. 22243051d27SRobert Mustacchi.El 22343051d27SRobert Mustacchi.Sh INTERFACE STABILITY 22443051d27SRobert Mustacchi.Sy Uncommitted 22543051d27SRobert Mustacchi.Sh MT-LEVEL 22643051d27SRobert Mustacchi.Sy MT-Safe 22743051d27SRobert Mustacchi.Sh SEE ALSO 22843051d27SRobert Mustacchi.Xr exec 2 , 22943051d27SRobert Mustacchi.Xr execvp 2 , 23043051d27SRobert Mustacchi.Xr fork 2 , 23143051d27SRobert Mustacchi.Xr Intro 2 , 23243051d27SRobert Mustacchi.Xr errno 3C , 23343051d27SRobert Mustacchi.Xr libproc 3LIB , 23443051d27SRobert Mustacchi.Xr Pcreate_error 3PROC , 23543051d27SRobert Mustacchi.Xr Pfree 3PROC , 23643051d27SRobert Mustacchi.Xr Prelease 3PROC 237