|
|
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.