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