|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)execve.2 6.8 (Berkeley) 11/22/88
6: .\"
7: .TH EXECVE 2 "November 22, 1988"
8: .UC 4
9: .SH NAME
10: execve \- execute a file
11: .SH SYNOPSIS
12: .ft B
13: execve(path, argv, envp)
14: .br
15: char *path, **argv, **envp;
16: .fi
17: .SH DESCRIPTION
18: .I Execve
19: transforms the calling process into a new process.
20: The new process is constructed from an ordinary file,
21: whose name is pointed to by
22: .IR path ,
23: called the \fInew process file\fP.
24: This file is either an executable object file,
25: or a file of data for an interpreter.
26: An executable object file consists of an identifying header,
27: followed by pages of data representing the initial program (text)
28: and initialized data pages. Additional pages may be specified
29: by the header to be initialized with zero data. See
30: .IR a.out (5).
31: .PP
32: An interpreter file begins with a line of the form
33: .RB `` "#! \fIinterpreter\fP [\fIarg\fP]" ''.
34: When an interpreter file is
35: .IR execve\| 'd,
36: the system \fIexecve\fP\|'s the specified \fIinterpreter\fP.
37: If the optional
38: .I arg
39: is specified, it becomes the first argument to the
40: .IR interpreter ,
41: and the name of the originally
42: .BR execve 'd
43: file becomes the second argument;
44: otherwise, the name of the originally
45: .BR execve 'd
46: file becomes the first argument. The original arguments are shifted over to
47: become the subsequent arguments. The zeroth argument, normally the name of the
48: .BR execve 'd
49: file, is left unchanged.
50: .PP
51: There can be no return from a successful \fIexecve\fP because the calling
52: core image is lost.
53: This is the mechanism whereby different process images become active.
54: .PP
55: The argument \fIargv\fP is a pointer to a null-terminated array of
56: character pointers to null-terminated character strings.
57: These strings constitute the argument list to be made available to the new
58: process. By convention, at least one argument must be present in
59: this array, and the first element of this array should be
60: the name of the executed program (i.e., the last component of \fIpath\fP).
61: .PP
62: The argument \fIenvp\fP is also a pointer to a null-terminated array of
63: character pointers to null-terminated strings.
64: These strings pass information to the
65: new process that is not directly an argument to the command (see
66: .IR environ (7)).
67: .PP
68: Descriptors open in the calling process remain open in
69: the new process, except for those for which the close-on-exec
70: flag is set (see
71: .IR close (2)
72: and
73: .IR fcntl (2)).
74: Descriptors that remain open are unaffected by
75: .IR execve .
76: .PP
77: Ignored signals remain ignored across an
78: .IR execve ,
79: but signals that are caught are reset to their default values.
80: Blocked signals remain blocked regardless of changes to the signal action.
81: The signal stack is reset to be undefined (see
82: .IR sigvec (2)
83: for more information).
84: .PP
85: Each process has
86: .I real
87: user and group IDs and an
88: .I effective
89: user and group IDs. The
90: .I real
91: ID identifies the person using the system; the
92: .I effective
93: ID determines his access privileges.
94: .I Execve
95: changes the effective user and group ID to
96: the owner of the executed file if the file has the \*(lqset-user-ID\*(rq
97: or \*(lqset-group-ID\*(rq modes. The
98: .I real
99: user and group IDs are not affected.
100: .PP
101: The new process also inherits the following attributes from
102: the calling process:
103: .PP
104: .in +5n
105: .nf
106: .ta +2i
107: process ID see \fIgetpid\fP\|(2)
108: parent process ID see \fIgetppid\fP\|(2)
109: process group ID see \fIgetpgrp\fP\|(2)
110: access groups see \fIgetgroups\fP\|(2)
111: working directory see \fIchdir\fP\|(2)
112: root directory see \fIchroot\fP\|(2)
113: control terminal see \fItty\fP\|(4)
114: resource usages see \fIgetrusage\fP\|(2)
115: interval timers see \fIgetitimer\fP\|(2)
116: resource limits see \fIgetrlimit\fP\|(2)
117: file mode mask see \fIumask\fP\|(2)
118: signal mask see \fIsigvec\fP\|(2), \fIsigsetmask\fP\|(2)
119: .in -5n
120: .fi
121: .PP
122: When the executed program begins, it is called as follows:
123: .PP
124: .DT
125: .nf
126: main(argc, argv, envp)
127: int argc;
128: char **argv, **envp;
129: .fi
130: .PP
131: where
132: .I argc
133: is the number of elements in \fIargv\fP
134: (the ``arg count'')
135: and
136: .I argv
137: points to the array of character pointers
138: to the arguments themselves.
139: .PP
140: .I Envp
141: is a pointer to an array of strings that constitute
142: the
143: .I environment
144: of the process.
145: A pointer to this array is also stored in the global variable ``environ''.
146: Each string consists of a name, an \*(lq=\*(rq, and a null-terminated value.
147: The array of pointers is terminated by a null pointer.
148: The shell
149: .IR sh (1)
150: passes an environment entry for each global shell variable
151: defined when the program is called.
152: See
153: .IR environ (7)
154: for some conventionally
155: used names.
156: .SH "RETURN VALUE
157: If
158: .I execve
159: returns to the calling process an error has occurred; the
160: return value will be \-1 and the global variable
161: .I errno
162: will contain an error code.
163: .SH ERRORS
164: .I Execve
165: will fail and return to the calling process if one or more
166: of the following are true:
167: .TP 15
168: [ENOTDIR]
169: A component of the path prefix is not a directory.
170: .TP 15
171: [EINVAL]
172: The pathname contains a character with the high-order bit set.
173: .TP 15
174: [ENAMETOOLONG]
175: A component of a pathname exceeded 255 characters,
176: or an entire path name exceeded 1023 characters.
177: .TP 15
178: [ENOENT]
179: The new process file does not exist.
180: .TP 15
181: [ELOOP]
182: Too many symbolic links were encountered in translating the pathname.
183: .TP 15
184: [EACCES]
185: Search permission is denied for a component of the path prefix.
186: .TP 15
187: [EACCES]
188: The new process file is not an ordinary file.
189: .TP 15
190: [EACCES]
191: The new process file mode denies execute permission.
192: .TP 15
193: [ENOEXEC]
194: The new process file has the appropriate access
195: permission, but has an invalid magic number in its header.
196: .TP 15
197: [ETXTBSY]
198: The new process file is a pure procedure (shared text)
199: file that is currently open for writing or reading by some process.
200: .TP 15
201: [ENOMEM]
202: The new process requires more virtual memory than
203: is allowed by the imposed maximum
204: .RI ( getrlimit (2)).
205: .TP 15
206: [E2BIG]
207: The number of bytes in the new process's argument list
208: is larger than the system-imposed limit.
209: The limit in the system as released is 20480 bytes
210: (NCARGS in
211: .IR <sys/param.h> .
212: .TP 15
213: [EFAULT]
214: The new process file is not as long as indicated by
215: the size values in its header.
216: .TP 15
217: [EFAULT]
218: \fIPath\fP\|, \fIargv\fP\|, or \fIenvp\fP point
219: to an illegal address.
220: .TP 15
221: [EIO]
222: An I/O error occurred while reading from the file system.
223: .SH CAVEATS
224: If a program is
225: .I setuid
226: to a non-super-user, but is executed when
227: the real \fIuid\fP is ``root'', then the program has some of the powers
228: of a super-user as well.
229: .SH "SEE ALSO"
230: exit(2), fork(2), execl(3), environ(7)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.