summaryrefslogtreecommitdiff
path: root/static/v10/man2/exec.2
diff options
context:
space:
mode:
Diffstat (limited to 'static/v10/man2/exec.2')
-rw-r--r--static/v10/man2/exec.2288
1 files changed, 288 insertions, 0 deletions
diff --git a/static/v10/man2/exec.2 b/static/v10/man2/exec.2
new file mode 100644
index 00000000..7c1d013f
--- /dev/null
+++ b/static/v10/man2/exec.2
@@ -0,0 +1,288 @@
+.TH EXEC 2
+.CT 2 proc_man
+.SH NAME
+execl, execv, execle, execve, execlp, execvp, exect, environ \(mi execute a file
+.SH SYNOPSIS
+.nf
+.B int "execl(name, arg0, arg1, ..., argn, (char *)0)"
+.B char *name, *arg0, *arg1, ..., *argn;
+.PP
+.B int execv(name, argv)
+.B char *name, *argv[];
+.PP
+.B "int execle(name, arg0, arg1, ..., argn, (char *)0, envp)"
+.B "char *name, *arg0, *arg1, ..., *argn, *envp[];"
+.PP
+.B int execve(name, argv, envp)
+.B char *name, *argv[], *envp[];
+.PP
+.B int "execlp(name, arg0, arg1, ..., argn, (char *)0)"
+.B char *name, *arg0, *arg1, ..., *argn;
+.PP
+.B int execvp(name, argv)
+.B char *name, *argv[];
+.PP
+.B int exect(name, argv, envp)
+.B char *name, *argv[], *envp[];
+.PP
+.B extern char **environ;
+.fi
+.SH DESCRIPTION
+.I Exec
+in all its forms
+overlays the calling process with the named file, then
+transfers to the
+entry point of the image of the file.
+There can be no return from a successful
+.IR exec ;
+the calling image is lost.
+.PP
+Files remain open across
+.I exec
+unless explicit arrangement has been made;
+see
+.IR ioctl (2).
+Signals that are caught (see
+.IR signal (2))
+are reset
+to their default values.
+Other signals' behavior is unchanged.
+.PP
+Each user has a
+.I real
+userid and groupid and an
+.I effective
+userid and groupid.
+The real userid (groupid)
+identifies the person using the system;
+the effective userid (groupid)
+determines access privileges.
+.I Exec
+changes the effective userid and groupid to
+the owner of the executed file if the file has the set-userid
+or set-groupid modes.
+The real userid is not affected.
+.PP
+The security label (see
+.IR getflab (2))
+of the process is set as follows.
+If any arguments or environment parameters are present,
+or if and file descriptor numbers greater than 3 are in use,
+the lattice value of the process label
+is ascribed to them, otherwise lattice bottom.
+This value is ORed with the lattice value of
+the executed file to obtain the new lattice value for the process.
+If the new lattice value does not dominate the old,รย
+the permission mask (see
+.IR umask (2))
+is set to 022.
+.PP
+Process licenses persist.
+In the simplest case, the process obtains from the
+file the capabilities
+for which the process has licenses; see
+.IR getplab (2).
+The detailed computation for process capabilities is:
+Nominal capabilities are determined
+by ANDing the file capabilities with the
+capabilities in the file system ceiling (see
+.IR mount (2))
+and then ORing with built-in minima.
+Nominal licenses are determined by ANDing the file licenses
+with the licenses in the file system
+ceiling and with built-in maxima.
+Process capabilities are set by ORing the
+process licenses with the nominal licenses, then ANDing
+with the nominal capabilities.
+.PP
+The builtin minimum file capabilities are all 0.
+The builtin maximum file licenses for
+.B T_SETPRIV
+and
+.B T_LOG
+are 0; the rest are 1.
+.B
+.PP
+The
+.I name
+argument
+is a pointer to the name of the file
+to be executed.
+If the first two bytes of that file are the ASCII
+characters
+.LR #! ,
+then the first line of the file is taken to be ASCII and
+determines the name of the program to execute.
+The first nonblank string following
+.L #!
+in that line is substituted for
+.I name.
+Any second string, separated from the first by blanks or tabs,
+is inserted between
+the first two arguments (arguments 0 and 1) passed to the invoked file.
+.PP
+The argument pointers
+.I arg0, arg1, ...
+or the pointers in
+.I argv
+address null-terminated strings.
+Conventionally argument 0
+is the name of the
+file.
+.PP
+.I Execl
+is useful when a known file with known arguments is
+being called;
+the arguments to
+.I execl
+are the character strings
+constituting the file and the arguments.
+.PP
+.I Execv
+is useful when the number of arguments is unknown
+in advance;
+the arguments to
+.I execv
+are the name of the file to be
+executed and a vector of strings containing
+the arguments.
+The last argument string must be followed
+by a 0
+pointer.
+.PP
+When a C program is executed,
+it is called as follows:
+.IP
+.EX
+main(argc, argv, envp)
+int argc;
+char **argv, **envp;
+.EE
+.PP
+where
+.IR argc ""
+is the argument count
+and
+.IR argv ""
+is an array of character pointers
+to the arguments themselves.
+Conventionally
+.I argc
+is at least 1
+and
+.B argv[0]
+points to
+the name of the file.
+.PP
+.I Argv
+is directly usable in another
+.I execv
+because
+.BR argv[argc]==0 .
+.PP
+.I Envp
+is a pointer to an array of strings that constitute
+the
+.I environment
+of the process.
+Each string conventionally consists of a name, an
+.LR = ,
+and a null-terminated value;
+or a name, a pair of parentheses
+.LR (),
+a value bracketed by
+.L {
+and
+.LR } ,
+and a null character.
+The array of pointers is terminated by a null pointer.
+The shell
+.IR sh (1)
+passes an environment entry for each global shell variable
+defined when the program is called.
+See
+.IR environ (5)
+for some conventionally
+used names.
+.PP
+The C run-time start-off routine places a copy of
+.I envp
+in the global cell
+.I environ,
+which is used
+by
+.I execv
+and
+.I execl
+to pass the environment to any subprograms executed by the
+current program.
+The
+.I exec
+routines use lower-level routines as follows
+to pass an environment explicitly:
+.IP
+.nf
+\fLexecve(file, argv, environ);
+execle(file, arg0, arg1, . . . , argn, (char *)0, environ);\fP
+.fi
+.PP
+.I Execlp
+and
+.I execvp
+are called with the same arguments as
+.I execl
+and
+.I execv,
+but duplicate the shell's actions in searching for an executable
+file in a list of directories given in the
+.B PATH
+environment variable.
+.PP
+.I Exect
+is the same as
+.I execve,
+except it arranges for a stop to occur on the first instruction
+of the new core image for the benefit of tracers, see
+.IR proc (4).
+.SH FILES
+.TF /bin/sh
+.TP
+.F /bin/sh
+shell, invoked if command file found
+by
+.I execlp
+or
+.I execvp
+.SH "SEE ALSO"
+.IR fork (2),
+.IR environ (5)
+.SH DIAGNOSTICS
+.BR E2BIG ,
+.BR EACCES ,
+.BR EFAULT ,
+.BR EIO ,
+.BR ELAB ,
+.BR ELOOP ,
+.BR ENOENT ,
+.BR ENOEXEC ,
+.BR ENOMEM ,
+.BR ENOTDIR ,
+.BR ENXIO ,
+.BR EROFS ,
+.BR ETXTBSY
+.SH BUGS
+If
+.I execvp
+is called to execute a file that turns out to be a shell
+command file,
+and if it is impossible to execute the shell,
+some of the values in
+.I argv
+may be modified before return.
+.br
+The path search of
+.I execlp
+and
+.I execvp
+does not extend to names substituted by
+.LR #! .