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