xref: /illumos-gate/usr/src/man/man3proc/Pcreate.3proc (revision bbf215553c7233fbab8a0afdf1fac74c44781867)
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