|
|
1.1 root 1: .TH EXECVE 2
2: .SH NAME
3: execl, execv, execle, execve, execlp, execvp \- execute a file
4: .SH SYNOPSIS
5: .B "int execl (path, arg0, arg1, ..., argn, 0)"
6: .br
7: .B char \(**path, \(**arg0, \(**arg1, ..., \(**argn;
8: .PP
9: .B int execv (path, argv)
10: .br
11: .B char \(**path, \(**argv[ ];
12: .PP
13: .B "int execle (path, arg0, arg1, ..., argn, 0, envp)"
14: .br
15: .B "char \(**path, \(**arg0, \(**arg1, ..., \(**argn, \(**envp[ ];"
16: .PP
17: .B int execve (path, argv, envp)
18: .br
19: .B char \(**path, \(**argv[ ], \(**envp[ ];
20: .PP
21: .B "int execlp (file, arg0, arg1, ..., argn, 0)"
22: .br
23: .B char \(**file, \(**arg0, \(**arg1, ..., \(**argn;
24: .PP
25: .B int execvp (file, argv)
26: .br
27: .B char \(**file, \(**argv[ ];
28: .SH DESCRIPTION
29: .I Exec\^
30: in all its forms transforms the calling process into a new process.
31: The new process is constructed from an ordinary, executable file called the
32: .IR "new process file" .
33: This file consists of a header (see
34: .IR a.out (4)),
35: a text segment, and a data segment.
36: The data segment contains an initialized portion and an uninitialized
37: portion (bss).
38: There can be no return from a successful
39: .I exec\^
40: because the calling process is overlaid by the new process.
41: .PP
42: When a C program is executed, it is called as follows:
43: .PP
44: .RS
45: .nf
46: .B "main (argc, argv, envp)"
47: .B "int argc;"
48: .B "char \(**\(**argv, \(**\(**envp;
49: .fi
50: .RE
51: .PP
52: where
53: .I argc
54: is the argument count and
55: .I argv
56: is an array of character pointers to the arguments themselves.
57: As indicated,
58: .I argc
59: is conventionally at least one and the first member of the array
60: points to a string containing the name of the file.
61: .PP
62: .I Path\^
63: points to a path name that identifies the new process file.
64: .PP
65: .I File\^
66: points to the new process file.
67: The path prefix for this file is obtained by a search of the directories
68: passed as the
69: .I environment\^
70: line "\s-1PATH\s+1 ="
71: (see
72: .IR environ (5)).
73: The environment
74: is supplied by the shell (see
75: .IR sh (1)).
76: .PP
77: .IR Arg0 ", " arg1 ", " ... ,
78: .I argn\^
79: are pointers to null-terminated character strings.
80: These strings constitute the argument list available to the new process.
81: By convention, at least
82: .I arg0\^
83: must be present and point to a string that is the same as
84: .I path\^
85: (or its last component).
86: .PP
87: .I Argv\^
88: is an array of character pointers to null-terminated strings.
89: These strings constitute the argument list available to the new process.
90: By convention,
91: .I argv\^
92: must have at least one member, and it must point to a string that is the same as
93: .IR path\^
94: (or its last component).
95: .I Argv\^
96: is terminated by a null pointer.
97: .PP
98: .I Envp\^
99: is an array of character pointers to null-terminated strings.
100: These strings constitute the environment
101: for the new process.
102: .I Envp\^
103: is terminated by a null pointer.
104: For
105: .I execl\^
106: and
107: .IR execv ,
108: the C run-time start-off routine places a pointer to the
109: environment of the calling process in the global cell:
110: .br
111: .B " extern char \(**\(**environ;"
112: .br
113: and it is used to pass the environment of the calling process to the new process.
114: .PP
115: File descriptors open in the calling process remain open in the new process,
116: except for those whose
117: \%close-on-exec
118: flag is set; see
119: .IR fcntl (2).
120: For those file descriptors that remain open, the file pointer is unchanged.
121: .PP
122: Signals set to terminate the calling process will be set to terminate the
123: new process.
124: Signals set to be ignored by the calling process will be set to be
125: ignored by the new process.
126: Signals set to be caught by the calling process will be set to terminate
127: new process; see
128: .IR signal (2).
129: .PP
130: If the set-user-\s-1ID\s+1
131: mode bit of the new process file is set
132: (see
133: .IR chmod (2)),
134: .I exec\^
135: sets the effective user
136: .SM ID
137: of the new process to the owner
138: .SM ID
139: of the new process file.
140: Similarly, if the set-group-\s-1ID\s+1 mode bit of the
141: new process file is set, the effective group
142: .SM ID
143: of the new process
144: is set to the group
145: .SM ID
146: of the new process file.
147: The real user
148: .SM ID
149: and real group
150: .SM ID
151: of the new process remain the same as those of the calling process.
152: .PP
153: The shared memory segments attached to the calling process will not be
154: attached to the new process (see
155: .IR shmop (2)).
156: .PP
157: Profiling is disabled for the new process; see
158: .IR profil (2).
159: .PP
160: The new process also inherits the following attributes from the calling process:
161: .PP
162: .PD 0
163: .RS 0.5i
164: .PP
165: nice value (see
166: .IR nice (2))
167: .PP
168: process
169: .SM ID
170: .PP
171: parent process
172: .SM ID
173: .PP
174: process group
175: .SM ID
176: .PP
177: semadj values (see
178: .IR semop (2))
179: .PP
180: tty group
181: .SM ID
182: (see
183: .IR exit (2)
184: and
185: .IR signal (2))
186: .PP
187: trace flag (see
188: .IR ptrace "(2) request 0)"
189: .PP
190: time left until an alarm clock signal (see
191: .IR alarm (2))
192: .PP
193: current working directory
194: .PP
195: root directory
196: .PP
197: file mode creation mask (see
198: .IR umask (2))
199: .PP
200: file size limit (see
201: .IR ulimit (2))
202: .PP
203: .IR utime ,
204: .IR stime ,
205: .IR cutime ,
206: and
207: .I cstime\^
208: (see
209: .IR times (2))
210: .RE
211: .PD
212: .PP
213: .I Exec\^
214: will fail and return to the calling process if one or more of the
215: following are true:
216: .TP 15
217: .SM
218: \%[ENOENT]
219: One or more components of the new process path name of the file do not exist.
220: .TP
221: .SM
222: \%[ENOTDIR]
223: A component of the new process path of the file prefix is not a directory.
224: .TP
225: .SM
226: \%[EACCES]
227: Search permission is denied for a directory listed in the new process file's
228: path prefix.
229: .TP
230: .SM
231: \%[EACCES]
232: The new process file is not an ordinary file.
233: .TP
234: .SM
235: \%[EACCES]
236: The new process file mode denies execution permission.
237: .TP
238: .SM
239: \%[ENOEXEC]
240: The exec is not an
241: .I execlp\^
242: or
243: .IR execvp\^ ,
244: and the new process file has the appropriate access permission
245: but an invalid magic number in its header.
246: .TP
247: .SM
248: \%[ETXTBSY]
249: The new process file is a pure procedure (shared text) file that is
250: currently open for writing by some process.
251: .TP
252: .SM
253: \%[ENOMEM]
254: The new process requires more memory than is allowed by the system-imposed
255: maximum
256: .SM MAXMEM.
257: .TP
258: .SM
259: \%[E2BIG]
260: The number of bytes in the new process's argument list is greater than the
261: system-imposed limit of 5120 bytes.
262: .TP
263: .SM
264: \%[EFAULT]
265: The new process file is not as long as indicated by the size values in its
266: header.
267: .TP
268: .SM
269: \%[EFAULT]
270: .IR Path ,
271: .IR argv ,
272: or
273: .I envp\^
274: point to an illegal address.
275: .SH RETURN VALUE
276: If
277: .I exec\^
278: returns to the calling process an error has occurred; the return value
279: will be \-1 and
280: .I errno\^
281: will be set to indicate the error.
282: .SH NOTES
283: This manual page replaces the corresponding 4.2BSD manual page.
284: .SH "SEE ALSO"
285: alarm(2), exit(2), fork(2), nice(2), ptrace(2), semop(2), signal(2), times(2), ulimit(2), umask(2), a.out(4), environ(5).
286: .br
287: sh(1) in the
288: \f2\s-1UNIX\s+1 System User Reference Manual\fR.
289: .\" @(#)exec.2 6.2 of 9/6/83
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.