1 EXEC(2) System Calls EXEC(2) 2 3 NAME 4 exec, execl, execle, execlp, execv, execve, execvp, fexecve execute a 5 file 6 7 SYNOPSIS 8 #include <unistd.h> 9 10 int 11 execl(const char *path, const char *arg0, ... /* const char *argn, (char *)0 */); 12 13 int 14 execv(const char *path, char *const argv[]); 15 16 int 17 execle(const char *path, const char *arg0, 18 ... /* const char *argn, (char *)0, char *const envp[] */); 19 20 int 21 execve(const char *path, char *const argv[], char *const envp[]); 22 23 int 24 execlp(const char *file, const char *arg0, ... /* const char *argn, (char *)0 */); 25 26 int 27 execvp(const char *file, char *const argv[]); 28 29 int 30 fexecve(int fd, char *const argv[], char *const envp[]); 31 32 DESCRIPTION 33 Each of the functions in the exec family replaces the current process 34 image with a new process image. The new image is constructed from a 35 regular, executable file called the new process image file. This file is 36 either an executable object file or a file of data for an interpreter. 37 There is no return from a successful call to one of these functions 38 because the calling process image is overlaid by the new process image. 39 40 An interpreter file begins with a line of the form 41 42 #! pathname [arg] 43 44 where pathname is the path of the interpreter, and arg is an optional 45 argument. When an interpreter file is executed, the system invokes the 46 specified interpreter. The pathname specified in the interpreter file is 47 passed as arg0 to the interpreter. If arg was specified in the 48 interpreter file, it is passed as arg1 to the interpreter. The remaining 49 arguments to the interpreter are arg0 through argn of the originally 50 exec'd file. The interpreter named by pathname must not be an 51 interpreter file. 52 53 When a C-language program is executed as a result of this call, it is 54 entered as a C-language function call as follows: 55 56 int main(int argc, char *argv[]) 57 58 where argc is the argument count and argv is an array of character 59 pointers to the arguments themselves. In addition, the following 60 variable: 61 62 extern char **environ; 63 64 is initialized as a pointer to an array of character pointers to the 65 environment strings. The argv and environ arrays are each terminated by 66 a null pointer. The null pointer terminating the argv array is not 67 counted in argc. 68 69 The value of argc is non-negative, and if greater than 0, argv[0] points 70 to a string containing the name of the file. If argc is 0, argv[0] is a 71 null pointer, in which case there are no arguments. Applications should 72 verify that argc is greater than 0 or that argv[0] is not a null pointer 73 before dereferencing argv[0]. 74 75 The arguments specified by a program with one of the exec functions are 76 passed on to the new process image in the Fn main arguments. 77 78 The path argument points to a path name that identifies the new process 79 image file. 80 81 The file argument is used to construct a pathname that identifies the new 82 process image file. If the file argument contains a slash character, it 83 is used as the pathname for this file. Otherwise, the path prefix for 84 this file is obtained by a search of the directories passed in the PATH 85 environment variable. See environ(5). The environment is supplied 86 typically by the shell. If the process image file is not a valid 87 executable object file, execlp() and execvp() use the contents of that 88 file as standard input to the shell. In this case, the shell becomes the 89 new process image. The standard to which the caller conforms determines 90 which shell is used. See standards(5). 91 92 The fexecve() function is equivalent to execve(), except that instead of 93 using a named file, the file referenced by the file descriptor fd is 94 used. Note that this file descriptor must reference a regular file and 95 must have been opened for execute (with Dv O_EXEC , defined in 96 <fcntl.h>.) The image is loaded from offset zero of the file, regardless 97 of the offset of fd. 98 99 The arguments represented by arg0... are pointers to null-terminated 100 character strings. These strings constitute the argument list available 101 to the new process image. The list is terminated by a null pointer. The 102 arg0 argument should point to a filename that is associated with the 103 process being started by one of the exec functions. 104 105 The argv argument is an array of character pointers to null-terminated 106 strings. The last member of this array must be a null pointer. These 107 strings constitute the argument list available to the new process image. 108 The value in argv[0] should point to a filename that is associated with 109 the process being started by one of the exec functions. 110 111 The envp argument is an array of character pointers to null-terminated 112 strings. These strings constitute the environment for the new process 113 image. The envp array is terminated by a null pointer. For execl(), 114 execv(), execvp(), and execlp(), the C-language run-time start-off routine 115 places a pointer to the environment of the calling process in the global 116 object environ, and it is used to pass the environment of the calling 117 process to the new process image. 118 119 The number of bytes available for the new process's combined argument and 120 environment lists is ARG_MAX. It is implementation-dependent whether null 121 terminators, pointers, and/or any alignment bytes are included in this 122 total. 123 124 File descriptors open in the calling process image remain open in the new 125 process image, except for those whose close-on-exec flag FD_CLOEXEC is set; 126 see fcntl(2). For those file descriptors that remain open, all 127 attributes of the open file description, including file locks, remain 128 unchanged. 129 130 The preferred hardware address translation size (see memcntl(2)) for the 131 stack and heap of the new process image are set to the default system 132 page size. 133 134 Directory streams open in the calling process image are closed in the new 135 process image. 136 137 The state of conversion descriptors and message catalogue descriptors in 138 the new process image is undefined. For the new process, the equivalent 139 of: 140 141 setlocale(LC_ALL, "C"); 142 143 is executed at startup. 144 145 Signals set to the default action (BSIG_DFL) in the calling process image 146 are set to the default action in the new process image (see signal(3C)). 147 Signals set to be ignored (SIG_IGN) by the calling process image are set 148 to be ignored by the new process image. Signals set to be caught by the 149 calling process image are set to the default action in the new process 150 image (see signal.h(3HEAD)). After a successful call to any of the exec 151 functions, alternate signal stacks are not preserved and the SA_ONSTACK 152 flag is cleared for all signals. 153 154 After a successful call to any of the exec functions, any functions 155 previously registered by atexit(3C) are no longer registered. 156 157 The saved resource limits in the new process image are set to be a copy 158 of the process's corresponding hard and soft resource limits. 159 160 If the ST_NOSUID bit is set for the file system containing the new 161 process image file, then the effective user ID and effective group ID are 162 unchanged in the new process image. If the set-user-ID mode bit of the new 163 process image file is set (see chmod(2)), the effective user ID of the 164 new process image is set to the owner ID of the new process image file. 165 Similarly, if the set-group-ID mode bit of the new process image file is 166 set, the effective group ID of the new process image is set to the group 167 ID of the new process image file. The real user ID and real group ID of 168 the new process image remain the same as those of the calling process 169 image. The effective user ID and effective group ID of the new process 170 image are saved (as the saved set-user-ID and the saved set-group-ID for use 171 by setuid(2)). 172 173 The privilege sets are changed according to the following rules: 174 175 1. The inheritable set, I, is intersected with the limit set, L. This 176 mechanism enforces the limit set for processes. 177 178 2. The effective set, E, and the permitted set, P, are made equal to 179 the new inheritable set. 180 181 The system attempts to set the privilege-aware state to non-PA both before 182 performing any modifications to the process IDs and privilege sets as 183 well as after completing the transition to new UIDs and privilege sets, 184 following the rules outlined in privileges(5). 185 186 If the {PRIV_PROC_OWNER} privilege is asserted in the effective set, the 187 set-user-ID and set-group-ID bits will be honored when the process is being 188 controlled by ptrace(3C). Additional restrictions can apply when the 189 traced process has an effective UID of 0. See privileges(5). 190 191 Any shared memory segments attached to the calling process image will not 192 be attached to the new process image (see shmop(2)). Any mappings 193 established through mmap(2) are not preserved across an exec. Memory 194 mappings created in the process are unmapped before the address space is 195 rebuilt for the new process image. See mmap(2). 196 197 Memory locks established by the calling process via calls to mlockall(3C) 198 or mlock(3C) are removed. If locked pages in the address space of the 199 calling process are also mapped into the address spaces the locks 200 established by the other processes will be unaffected by the call by this 201 process to the exec function. If the exec function fails, the effect on 202 memory locks is unspecified. 203 204 If _XOPEN_REALTIME is defined and has a value other than 1, any named 205 semaphores open in the calling process are closed as if by appropriate 206 calls to sem_close(3C). 207 208 Profiling is disabled for the new process; see profil(2). 209 210 Timers created by the calling process with timer_create(3C) are deleted 211 before replacing the current process image with the new process image. 212 213 For the SCHED_FIFO and SCHED_RR scheduling policies, the policy and 214 priority settings are not changed by a call to an exec function. 215 216 All open message queue descriptors in the calling process are closed, as 217 described in mq_close(3C). 218 219 Any outstanding asynchronous I/O operations may be cancelled. Those 220 asynchronous I/O operations that are not canceled will complete as if the 221 exec function had not yet occurred, but any associated signal 222 notifications are suppressed. It is unspecified whether the exec 223 function itself blocks awaiting such I/O completion. In no event, 224 however, will the new process image created by the exec function be 225 affected by the presence of outstanding asynchronous I/O operations at 226 the time the exec function is called. 227 228 All active contract templates are cleared (see contract(4)). 229 230 The new process also inherits the following attributes from the calling 231 process: 232 233 controlling terminal 234 235 current working directory 236 237 file-locks (see fcntl(2) and lockf(3C)) 238 239 file mode creation mask (see umask(2)) 240 241 file size limit (see ulimit(2)) 242 243 limit privilege set 244 245 nice value (see nice(2)) 246 247 parent process ID 248 249 pending signals (see sigpending(2)) 250 251 privilege debugging flag (see privileges(5) and getpflags(2)) 252 253 process ID 254 255 process contract (see contract(4) and process(4)) 256 257 process group ID 258 259 process signal mask (see sigprocmask(2)) 260 261 processor bindings (see processor_bind(2)) 262 263 processor set bindings (see pset_bind(2)) 264 265 project ID 266 267 real group ID 268 269 real user ID 270 271 resource limits (see getrlimit(2)) 272 273 root directory 274 275 scheduler class and priority (see priocntl(2)) 276 277 semadj values (see semop(2)) 278 279 session membership (see exit(2) and signal(3C)) 280 281 supplementary group IDs 282 283 task ID 284 285 time left until an alarm clock signal (see alarm(2)) 286 287 tms_utime, tms_stime, tms_cutime, and tms_cstime (see times(2)) 288 289 trace flag (see ptrace(3C) request 0) 290 291 A call to any exec function from a process with more than one thread 292 results in all threads being terminated and the new executable image 293 being loaded and executed. No destructor functions will be called. 294 295 Upon successful completion, each of the functions in the exec family 296 marks for update the st_atime field of the file. If an exec function 297 failed but was able to locate the process image file, whether the 298 st_atime field is marked for update is unspecified. Should the function 299 succeed, the process image file is considered to have been opened with 300 open(2). The corresponding close(2) is considered to occur at a time 301 after this open, but before process termination or successful completion 302 of a subsequent call to one of the exec functions. The argv and envp 303 arrays of pointers and the strings to which those arrays point will not 304 be modified by a call to one of the exec functions, except as a 305 consequence of replacing the process image. 306 307 The saved resource limits in the new process image are set to be a copy 308 of the process's corresponding hard and soft limits. 309 310 RETURN VALUES 311 If a function in the exec family returns to the calling process image, an 312 error has occurred; the return value is1 and errno is set to indicate 313 the error. 314 315 ERRORS 316 The exec functions will fail if: 317 318 [E2BIG] The number of bytes in the new process's argument list 319 is greater than the system-imposed limit of {ARG_MAX} 320 bytes. The argument list limit is sum of the size of 321 the argument list plus the size of the environment's 322 exported shell variables. 323 324 [EACCES] Search permission is denied for a directory listed in 325 the new process file's path prefix. 326 327 The new process file is not an ordinary file. 328 329 The new process file mode denies execute permission. 330 331 The {FILE_DAC_SEARCH} privilege overrides the 332 restriction on directory searches. 333 334 The {FILE_DAC_EXECUTE} privilege overrides the lack of 335 execute permission. 336 337 [EAGAIN] Total amount of system memory available when reading 338 using raw I/O is temporarily insufficient. 339 340 [EFAULT] An argument points to an illegal address. 341 342 [EINVAL] The new process image file has the appropriate 343 permission and has a recognized executable binary 344 format, but the system does not support execution of a 345 file with this format. 346 347 [EINTR] A signal was caught during the execution of one of the 348 functions in the exec family. 349 350 The exec functions except fexecve() will fail if: 351 352 [ELOOP] Too many symbolic links were encountered in 353 translating path or file. 354 355 [ENAMETOOLONG] The length of the file or path argument exceeds 356 {PATH_MAX}, or the length of a file or path component 357 exceeds {NAME_MAX} while {_POSIX_NO_TRUNC} is in 358 effect. 359 360 [ENOENT] One or more components of the new process path name of 361 the file do not exist or is a null pathname. 362 363 [ENOLINK] The path argument points to a remote machine and the 364 link to that machine is no longer active. 365 366 [ENOTDIR] A component of the new process path of the file prefix 367 is not a directory. 368 369 The exec functions, except for execlp() and execvp(), will fail if: 370 371 [ENOEXEC] The new process image file has the appropriate access 372 permission but is not in the proper format. 373 374 The fexecve() function will fail if: 375 376 [EBADF] The fd argument is not a valid file descriptor opened 377 for execute. 378 379 380 The exec functions except for fexecve() may fail if: 381 382 [ENAMETOOLONG] Pathname resolution of a symbolic link produced an 383 intermediate result whose length exceeds {PATH_MAX}. 384 385 [ENOMEM] The new process image requires more memory than is 386 allowed by the hardware or system-imposed by memory 387 management constraints. See brk(2). 388 389 [ETXTBSY] The new process image file is a pure procedure (shared 390 text) file that is currently open for writing by some 391 process. 392 393 USAGE 394 As the state of conversion descriptors and message catalogue descriptors 395 in the new process image is undefined, portable applications should not 396 rely on their use and should close them prior to calling one of the exec 397 functions. 398 399 Applications that require other than the default POSIX locale should call 400 setlocale(3C) with the appropriate parameters to establish the locale of 401 the new process. 402 403 The environ array should not be accessed directly by the application. 404 Instead, getenv(3C) should be used. 405 406 SEE ALSO 407 ps(1), sh(1), alarm(2), brk(2), chmod(2), exit(2), fcntl(2), fork(2), 408 getpflags(2), getrlimit(2), memcntl(2), mmap(2), nice(2), open(2), 409 priocntl(2), profil(2), semop(2), shmop(2), sigpending(2), 410 sigprocmask(2), times(2), umask(2), lockf(3C), ptrace(3C), setlocale(3C), 411 signal(3C), system(3C), timer_create(3C), fcntl.h(3HEAD), 412 signal.h(3HEAD), unistd.h(3HEAD), a.out(4), contract(4), process(4), 413 environ(5), privileges(5), standards(5) 414 415 INTERFACE STABILITY 416 Standard. 417 418 MT-LEVEL 419 The execle(), execve(), fexecve() functions are Async-Signal-Safe. 420 421 STANDARDS 422 These functions are available in the following compilation environments. 423 See standards(5). 424 425 execl(), execle(), execlp(), execv(), execve(), execvp() 426 IEEE Std 1003.1-1990 (POSIX.1) 427 X/Open Portability Guide Issue3 (XPG3) 428 X/Open Portability Guide Issue4 (XPG4) 429 X/Open Portability Guide Issue4, Version2 (XPG4.2) 430 Version2 of the Single UNIX Specification (SUSv2) 431 Version3 of the Single UNIX Specification (SUSv3) 432 IEEE Std 1003.1-2008 (POSIX.1) 433 434 fexecve() 435 IEEE Std 1003.1-2008 (POSIX.1) 436 437 WARNINGS 438 If a program is setuid to a user ID other than the superuser, and the 439 program is executed when the real user ID is super-user, then the program 440 has some of the powers of a super-user as well. 441 442 illumos September 19, 2014 illumos