- Fix for possible unset uid/gid in toproto
 - Fix for default mtree style
 - Update libelf
 - Importing libexecinfo
 - Resynchronize GCC, mpc, gmp, mpfr
 - build.sh: Replace params with show-params.
     This has been done as the make target has been renamed in the same
     way, while a new target named params has been added. This new
     target generates a file containing all the parameters, instead of
     printing it on the console.
 - Update test48 with new etc/services (Fix by Ben Gras <ben@minix3.org)
     get getservbyport() out of the inner loop
Change-Id: Ie6ad5226fa2621ff9f0dee8782ea48f9443d2091
		
	
			
		
			
				
	
	
		
			474 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			474 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" $NetBSD: posix_spawn.3,v 1.4 2013/07/20 21:39:57 wiz Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 2008 Ed Schouten <ed@FreeBSD.org>
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
						|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
.\" SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\" Portions of this text are reprinted and reproduced in electronic form
 | 
						|
.\" from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology --
 | 
						|
.\" Portable Operating System Interface (POSIX), The Open Group Base
 | 
						|
.\" Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of
 | 
						|
.\" Electrical and Electronics Engineers, Inc and The Open Group.  In the
 | 
						|
.\" event of any discrepancy between this version and the original IEEE and
 | 
						|
.\" The Open Group Standard, the original IEEE and The Open Group Standard is
 | 
						|
.\" the referee document.  The original Standard can be obtained online at
 | 
						|
.\"	http://www.opengroup.org/unix/online.html.
 | 
						|
.\"
 | 
						|
.\" $FreeBSD: src/lib/libc/gen/posix_spawn.3,v 1.2.2.1.4.1 2010/06/14 02:09:06 kensmith Exp $
 | 
						|
.\"
 | 
						|
.Dd December 20, 2011
 | 
						|
.Dt POSIX_SPAWN 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm posix_spawn ,
 | 
						|
.Nm posix_spawnp
 | 
						|
.Nd "spawn a process"
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In spawn.h
 | 
						|
.Ft int
 | 
						|
.Fn posix_spawn "pid_t *restrict pid" "const char *restrict path" "const posix_spawn_file_actions_t *file_actions" "const posix_spawnattr_t *restrict attrp" "char *const argv[restrict]" "char *const envp[restrict]"
 | 
						|
.Ft int
 | 
						|
.Fn posix_spawnp "pid_t *restrict pid" "const char *restrict file" "const posix_spawn_file_actions_t *file_actions" "const posix_spawnattr_t *restrict attrp" "char *const argv[restrict]" "char *const envp[restrict]"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn posix_spawn
 | 
						|
and
 | 
						|
.Fn posix_spawnp
 | 
						|
functions create a new process (child process) from the specified
 | 
						|
process image.
 | 
						|
The new process image is constructed from a regular executable
 | 
						|
file called the new process image file.
 | 
						|
.Pp
 | 
						|
When a C program is executed as the result of this call, it is
 | 
						|
entered as a C-language function call as follows:
 | 
						|
.Bd -literal -offset indent
 | 
						|
int main(int argc, char *argv[]);
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
where
 | 
						|
.Fa argc
 | 
						|
is the argument count and
 | 
						|
.Fa argv
 | 
						|
is an array of character pointers to the arguments themselves.
 | 
						|
In addition, the variable:
 | 
						|
.Bd -literal -offset indent
 | 
						|
extern char **environ;
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
points to an array of character pointers to
 | 
						|
the environment strings.
 | 
						|
.Pp
 | 
						|
The argument
 | 
						|
.Fa argv
 | 
						|
is an array of character pointers to null-terminated
 | 
						|
strings.
 | 
						|
The last member of this array is a null pointer and is not counted
 | 
						|
in
 | 
						|
.Fa argc .
 | 
						|
These strings constitute the argument list available to the new process
 | 
						|
image.
 | 
						|
The value in
 | 
						|
.Fa argv Ns [0]
 | 
						|
should point to
 | 
						|
a filename that is associated with the process image being started by
 | 
						|
the
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
function.
 | 
						|
.Pp
 | 
						|
The argument
 | 
						|
.Fa envp
 | 
						|
is an array of character pointers to null-terminated strings.
 | 
						|
These strings constitute the environment for the new process image.
 | 
						|
The environment array is terminated by a null pointer.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fa path
 | 
						|
argument to
 | 
						|
.Fn posix_spawn
 | 
						|
is a pathname that identifies the new process image file to execute.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fa file
 | 
						|
parameter to
 | 
						|
.Fn posix_spawnp
 | 
						|
is used to construct a pathname that identifies the new process
 | 
						|
image file.
 | 
						|
If the file parameter contains a slash character, the file parameter
 | 
						|
is used as the pathname for the new process image file.
 | 
						|
Otherwise, the path prefix for this file is obtained by a search
 | 
						|
of the directories passed as the environment variable
 | 
						|
.Dq Ev PATH .
 | 
						|
If this variable is not specified,
 | 
						|
the default path is set according to the
 | 
						|
.Dv _PATH_DEFPATH
 | 
						|
definition in
 | 
						|
.In paths.h ,
 | 
						|
which is set to
 | 
						|
.Dq Ev /usr/bin:/bin .
 | 
						|
.Pp
 | 
						|
If
 | 
						|
.Fa file_actions
 | 
						|
is a null pointer, then file descriptors open in the
 | 
						|
calling process remain open in the child process, except for those
 | 
						|
whose close-on-exec flag
 | 
						|
.Dv FD_CLOEXEC
 | 
						|
is set (see
 | 
						|
.Fn fcntl ) .
 | 
						|
For those
 | 
						|
file descriptors that remain open, all attributes of the corresponding
 | 
						|
open file descriptions, including file locks (see
 | 
						|
.Fn fcntl ) ,
 | 
						|
remain unchanged.
 | 
						|
.Pp
 | 
						|
If
 | 
						|
.Fa file_actions
 | 
						|
is not
 | 
						|
.Dv NULL ,
 | 
						|
then the file descriptors open in the child process are
 | 
						|
those open in the calling process as modified by the spawn file
 | 
						|
actions object pointed to by
 | 
						|
.Fa file_actions
 | 
						|
and the
 | 
						|
.Dv FD_CLOEXEC
 | 
						|
flag of each remaining open file descriptor after the spawn file actions
 | 
						|
have been processed.
 | 
						|
The effective order of processing the spawn file actions are:
 | 
						|
.Bl -enum
 | 
						|
.It
 | 
						|
The set of open file descriptors for the child process initially
 | 
						|
are the same set as is open for the calling process.
 | 
						|
All attributes of the corresponding open file descriptions, including
 | 
						|
file locks (see
 | 
						|
.Fn fcntl ) ,
 | 
						|
remain unchanged.
 | 
						|
.It
 | 
						|
The signal mask, signal default actions, and the effective user and
 | 
						|
group IDs for the child process are changed as specified in the
 | 
						|
attributes object referenced by
 | 
						|
.Fa attrp .
 | 
						|
.It
 | 
						|
The file actions specified by the spawn file actions object are
 | 
						|
performed in the order in which they were added to the spawn file
 | 
						|
actions object.
 | 
						|
.It
 | 
						|
Any file descriptor that has its
 | 
						|
.Dv FD_CLOEXEC
 | 
						|
flag set (see
 | 
						|
.Fn fcntl )
 | 
						|
is closed.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Vt posix_spawnattr_t
 | 
						|
spawn attributes object type is defined in
 | 
						|
.In spawn.h .
 | 
						|
It contains the attributes defined below.
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETPGROUP
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
and the spawn-pgroup attribute of the same object is non-zero, then the
 | 
						|
child's process group is as specified in the spawn-pgroup
 | 
						|
attribute of the object referenced by
 | 
						|
.Fa attrp .
 | 
						|
.Pp
 | 
						|
As a special case, if the
 | 
						|
.Dv POSIX_SPAWN_SETPGROUP
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
and the spawn-pgroup attribute of the same object is set to zero, then
 | 
						|
the child is in a new process group with a process group ID equal
 | 
						|
to its process ID.
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETPGROUP
 | 
						|
flag is not set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
the new child process inherits the parent's process group.
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETSCHEDPARAM
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
but
 | 
						|
.Dv POSIX_SPAWN_SETSCHEDULER
 | 
						|
is not set, the new process image initially has the scheduling
 | 
						|
policy of the calling process with the scheduling parameters specified
 | 
						|
in the spawn-schedparam attribute of the object referenced by
 | 
						|
.Fa attrp .
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETSCHEDULER
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp
 | 
						|
(regardless of the setting of the
 | 
						|
.Dv POSIX_SPAWN_SETSCHEDPARAM
 | 
						|
flag), the new process image initially has the scheduling policy
 | 
						|
specified in the spawn-schedpolicy attribute of the object referenced by
 | 
						|
.Fa attrp
 | 
						|
and the scheduling parameters specified in the spawn-schedparam
 | 
						|
attribute of the same object.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Dv POSIX_SPAWN_RESETIDS
 | 
						|
flag in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp
 | 
						|
governs the effective user ID of the child process.
 | 
						|
If this flag is not set, the child process inherits the parent
 | 
						|
process' effective user ID.
 | 
						|
If this flag is set, the child process' effective user ID is reset
 | 
						|
to the parent's real user ID.
 | 
						|
In either case, if the set-user-ID mode bit of the new process image
 | 
						|
file is set, the effective user ID of the child process becomes
 | 
						|
that file's owner ID before the new process image begins execution.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Dv POSIX_SPAWN_RESETIDS
 | 
						|
flag in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp
 | 
						|
also governs the effective group ID of the child process.
 | 
						|
If this flag is not set, the child process inherits the parent
 | 
						|
process' effective group ID.
 | 
						|
If this flag is set, the child process' effective group ID is
 | 
						|
reset to the parent's real group ID.
 | 
						|
In either case, if the set-group-ID mode bit of the new process image
 | 
						|
file is set, the effective group ID of the child process becomes
 | 
						|
that file's group ID before the new process image begins execution.
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETSIGMASK
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
the child process initially has the signal mask specified in the
 | 
						|
spawn-sigmask attribute of the object referenced by
 | 
						|
.Fa attrp .
 | 
						|
.Pp
 | 
						|
If the
 | 
						|
.Dv POSIX_SPAWN_SETSIGDEF
 | 
						|
flag is set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp ,
 | 
						|
the signals specified in the spawn-sigdefault attribute of the same
 | 
						|
object is set to their default actions in the child process.
 | 
						|
Signals set to the default action in the parent process is set to
 | 
						|
the default action in the child process.
 | 
						|
.Pp
 | 
						|
Signals set to be caught by the calling process is set to the
 | 
						|
default action in the child process.
 | 
						|
.Pp
 | 
						|
Signals set to be ignored by the calling process image is set to
 | 
						|
be ignored by the child process, unless otherwise specified by the
 | 
						|
.Dv POSIX_SPAWN_SETSIGDEF
 | 
						|
flag being set in the spawn-flags attribute of the object referenced by
 | 
						|
.Fa attrp
 | 
						|
and the signals being indicated in the spawn-sigdefault attribute
 | 
						|
of the object referenced by
 | 
						|
.Fa attrp .
 | 
						|
.Pp
 | 
						|
If the value of the
 | 
						|
.Fa attrp
 | 
						|
pointer is
 | 
						|
.Dv NULL ,
 | 
						|
then the default values are used.
 | 
						|
.Pp
 | 
						|
All process attributes, other than those influenced by the attributes
 | 
						|
set in the object referenced by
 | 
						|
.Fa attrp
 | 
						|
as specified above or by the file descriptor manipulations specified in
 | 
						|
.Fa file_actions ,
 | 
						|
appear in the new process image as though
 | 
						|
.Fn vfork
 | 
						|
had been called to create a child process and then
 | 
						|
.Fn execve
 | 
						|
had been called by the child process to execute the new process image.
 | 
						|
.Pp
 | 
						|
The implementation uses vfork(), thus the fork handlers are not run when
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
is called.
 | 
						|
.Sh RETURN VALUES
 | 
						|
Upon successful completion,
 | 
						|
.Fn posix_spawn
 | 
						|
and
 | 
						|
.Fn posix_spawnp
 | 
						|
return the process ID of the child process to the parent process,
 | 
						|
in the variable pointed to by a
 | 
						|
.Pf non- Dv NULL
 | 
						|
.Fa pid
 | 
						|
argument, and return zero as the function return value.
 | 
						|
Otherwise, no child process is created, no value is stored into
 | 
						|
the variable pointed to by
 | 
						|
.Fa pid ,
 | 
						|
and an error number is returned as the function return value to
 | 
						|
indicate the error.
 | 
						|
If the
 | 
						|
.Fa pid
 | 
						|
argument is a null pointer, the process ID of the child is not returned
 | 
						|
to the caller.
 | 
						|
.Sh ERRORS
 | 
						|
.Bl -enum
 | 
						|
.It
 | 
						|
If
 | 
						|
.Fn posix_spawn
 | 
						|
and
 | 
						|
.Fn posix_spawnp
 | 
						|
fail for any of the reasons that would cause
 | 
						|
.Fn vfork
 | 
						|
or one of the
 | 
						|
.Nm exec
 | 
						|
to fail, an error value is returned as described by
 | 
						|
.Fn vfork
 | 
						|
and
 | 
						|
.Nm exec ,
 | 
						|
respectively (or, if the error occurs after the calling process successfully
 | 
						|
returns, the child process exits with exit status 127).
 | 
						|
.It
 | 
						|
If
 | 
						|
.Nm POSIX_SPAWN_SETPGROUP
 | 
						|
is set in the spawn-flags attribute of the object referenced by attrp, and
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
fails while changing the child's process group, an error value is returned as
 | 
						|
described by
 | 
						|
.Fn setpgid
 | 
						|
(or, if the error occurs after the calling process successfully returns,
 | 
						|
the child process exits with exit status 127).
 | 
						|
.It
 | 
						|
If
 | 
						|
.Nm POSIX_SPAWN_SETSCHEDPARAM
 | 
						|
is set and
 | 
						|
.Nm POSIX_SPAWN_SETSCHEDULER
 | 
						|
is not set in the spawn-flags attribute of the object referenced by attrp, then
 | 
						|
if
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
fails for any of the reasons that would cause
 | 
						|
.Fn sched_setparam
 | 
						|
to fail, an error value is returned as described by
 | 
						|
.Fn sched_setparam
 | 
						|
(or, if the error occurs after the calling process successfully returns, the
 | 
						|
child process exits with exit status 127).
 | 
						|
.It
 | 
						|
If
 | 
						|
.Nm POSIX_SPAWN_SETSCHEDULER
 | 
						|
is set in the spawn-flags attribute of the object referenced by attrp, and if
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
fails for any of the reasons that would cause
 | 
						|
.Fn sched_setscheduler
 | 
						|
to fail, an error value is returned as described by
 | 
						|
.Fn sched_setscheduler
 | 
						|
(or, if the error occurs after the calling process successfully returns,
 | 
						|
the child process exits with exit status 127).
 | 
						|
.It
 | 
						|
If the
 | 
						|
.Fa file_actions
 | 
						|
argument is not
 | 
						|
.Dv NULL ,
 | 
						|
and specifies any
 | 
						|
.Fn close ,
 | 
						|
.Fn dup2 ,
 | 
						|
or
 | 
						|
.Fn open
 | 
						|
actions to be performed, and if
 | 
						|
.Fn posix_spawn
 | 
						|
or
 | 
						|
.Fn posix_spawnp
 | 
						|
fails for any of the reasons that would cause
 | 
						|
.Fn close ,
 | 
						|
.Fn dup2 ,
 | 
						|
or
 | 
						|
.Fn open
 | 
						|
to fail, an error value is returned as described by
 | 
						|
.Fn close ,
 | 
						|
.Fn dup2 ,
 | 
						|
and
 | 
						|
.Fn open ,
 | 
						|
respectively (or, if the error occurs after the calling process successfully
 | 
						|
returns, the child process exits with exit status 127). An open file action
 | 
						|
may, by itself, result in any of the errors described by
 | 
						|
.Fn close
 | 
						|
or
 | 
						|
.Fn dup2 ,
 | 
						|
in addition to those described by
 | 
						|
.Fn open .
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr close 2 ,
 | 
						|
.Xr dup2 2 ,
 | 
						|
.Xr execve 2 ,
 | 
						|
.Xr fcntl 2 ,
 | 
						|
.Xr open 2 ,
 | 
						|
.Xr setpgid 2 ,
 | 
						|
.Xr vfork 2 ,
 | 
						|
.Xr posix_spawn_file_actions_addclose 3 ,
 | 
						|
.Xr posix_spawn_file_actions_adddup2 3 ,
 | 
						|
.Xr posix_spawn_file_actions_addopen 3 ,
 | 
						|
.Xr posix_spawn_file_actions_destroy 3 ,
 | 
						|
.Xr posix_spawn_file_actions_init 3 ,
 | 
						|
.Xr posix_spawnattr_destroy 3 ,
 | 
						|
.Xr posix_spawnattr_getflags 3 ,
 | 
						|
.Xr posix_spawnattr_getpgroup 3 ,
 | 
						|
.Xr posix_spawnattr_getschedparam 3 ,
 | 
						|
.Xr posix_spawnattr_getschedpolicy 3 ,
 | 
						|
.Xr posix_spawnattr_getsigdefault 3 ,
 | 
						|
.Xr posix_spawnattr_getsigmask 3 ,
 | 
						|
.Xr posix_spawnattr_init 3 ,
 | 
						|
.Xr posix_spawnattr_setflags 3 ,
 | 
						|
.Xr posix_spawnattr_setpgroup 3 ,
 | 
						|
.Xr posix_spawnattr_setschedparam 3 ,
 | 
						|
.Xr posix_spawnattr_setschedpolicy 3 ,
 | 
						|
.Xr posix_spawnattr_setsigdefault 3 ,
 | 
						|
.Xr posix_spawnattr_setsigmask 3 ,
 | 
						|
.Xr sched_setparam 3 ,
 | 
						|
.Xr sched_setscheduler 3
 | 
						|
.Sh STANDARDS
 | 
						|
The
 | 
						|
.Fn posix_spawn
 | 
						|
and
 | 
						|
.Fn posix_spawnp
 | 
						|
functions conform to
 | 
						|
.St -p1003.1-2001 .
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn posix_spawn
 | 
						|
and
 | 
						|
.Fn posix_spawnp
 | 
						|
functions first appeared in
 | 
						|
.Fx 8.0 .
 | 
						|
The library parts were ported and a kernel implementation of
 | 
						|
.Fn posix_spawn
 | 
						|
added for
 | 
						|
.Nx 6.0
 | 
						|
during Google Summer of Code by Charles Zhang and Martin Husemann.
 | 
						|
.Sh AUTHORS
 | 
						|
.An Ed Schouten Aq Mt ed@FreeBSD.org
 |