Print this page
5798 fexecve() needed per POSIX 2008
   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 must not be
  56        an interpreter file.
  57 
  58 
  59        When a C-language program is executed as a result of this call, it is
  60        entered as a C-language function call as follows:
  61 
  62          int main (int argc, char *argv[]);
  63 
  64 
  65 
  66        where argc is the argument count and argv is an array of character
  67        pointers to the arguments themselves. In addition, the following
  68        variable:
  69 
  70          extern char **environ;
  71 
  72 
  73 
  74        is initialized as a pointer to an array of character pointers to the
  75        environment strings. The argv and environ arrays are each terminated by
  76        a null pointer. The null pointer terminating the argv array is not
  77        counted in argc.
  78 
  79 
  80        The value of argc is non-negative, and if greater than 0, argv[0] points
  81        to a string containing the name of the file. If argc is 0, argv[0] is a
  82        null pointer, in which case there are no arguments.  Applications
  83        should verify that argc is greater than 0 or that argv[0] is not a null
  84        pointer before dereferencing argv[0].
  85 
  86 
  87        The arguments specified by a program with one of the exec functions are
  88        passed on to the new process image in the main() arguments.
  89 
  90 
  91        The path argument points to a path name that identifies the new process
  92        image file.
  93 










  94 
  95        The file argument is used to construct a pathname that identifies the
  96        new process image file. If the file argument contains a slash
  97        character, it is used as the pathname for this file. Otherwise, the
  98        path prefix for this file is obtained by a search of the directories
  99        passed in the PATH environment variable (see environ(5)). The
 100        environment is supplied typically by the shell. If the process image
 101        file is not a valid executable object file, execlp() and execvp() use
 102        the contents of that file as standard input to the shell. In this case,
 103        the shell becomes the new process image. The standard to which the
 104        caller conforms determines which shell is used. See standards(5).
 105 
 106 
 107        The arguments represented by arg0... are pointers to null-terminated
 108        character strings. These strings constitute the argument list available
 109        to the new process image. The list is terminated by a null pointer.
 110        The arg0 argument should point to a filename that is associated with
 111        the process being started by one of the exec functions.
 112 
 113 
 114        The argv argument is an array of character pointers to null-terminated
 115        strings. The last member of this array must be a null pointer. These
 116        strings constitute the argument list available to the new process
 117        image. The value in argv[0] should point to a filename that is
 118        associated with the process being started by one of the exec functions.
 119 
 120 
 121        The envp argument is an array of character pointers to null-terminated
 122        strings. These strings constitute the environment for the new process
 123        image.  The envp array is terminated by a null pointer. For execl(),
 124        execv(), execvp(), and execlp(), the C-language run-time start-off routine
 125        places a pointer to the environment of the calling process in the
 126        global object extern char **environ, and it is used to pass the
 127        environment of the calling process to the new process image.
 128 




 129 
 130        The number of bytes available for the new process's combined argument
 131        and environment lists is ARG_MAX. It is implementation-dependent whether
 132        null terminators, pointers, and/or any alignment bytes are included in
 133        this total.
 134 
 135 
 136        File descriptors open in the calling process image remain open in the
 137        new process image, except for those whose close-on-exec flag FD_CLOEXEC
 138        is set; see fcntl(2). For those file descriptors that remain open, all
 139        attributes of the open file description, including file locks, remain
 140        unchanged.
 141 



 142 
 143        The preferred hardware address translation size (see memcntl(2)) for
 144        the stack and heap of the new process image are set to the default
 145        system page size.
 146 



 147 
 148        Directory streams open in the calling process image are closed in the
 149        new process image.
 150 
 151 
 152        The state of conversion descriptors and message catalogue descriptors
 153        in the new process image is undefined. For the new process, the
 154        equivalent of:
 155 
 156          setlocale(LC_ALL, "C")
 157 
 158 
 159 
 160        is executed at startup.
 161 








 162 
 163        Signals set to the default action (SIG_DFL) in the calling process
 164        image are set to the default action in the new process image (see
 165        signal(3C)).  Signals set to be ignored (SIG_IGN) by the calling
 166        process image are set to be ignored by the new process image. Signals
 167        set to be caught by the calling process image are set to the default
 168        action in the new process image (see signal.h(3HEAD)). After a
 169        successful call to any of the exec functions, alternate signal stacks
 170        are not preserved and the SA_ONSTACK flag is cleared for all signals.
 171 
 172 
 173        After a successful call to any of the exec functions, any functions
 174        previously registered by atexit(3C) are no longer registered.
 175 
 176 
 177        The saved resource limits in the new process image are set to be a copy
 178        of the process's corresponding hard and soft resource limits.
 179 
 180 
 181        If the ST_NOSUID bit is set for the file system containing the new
 182        process image file, then the effective user ID and effective group ID
 183        are unchanged in the new process image. If the set-user-ID mode bit of
 184        the new process image file is set (see chmod(2)), the effective user ID
 185        of the new process image is set to the owner ID of the new process
 186        image file. Similarly, if the set-group-ID mode bit of the new process
 187        image file is set, the effective group ID of the new process image is
 188        set to the group ID of the new process image file. The real user ID and
 189        real group ID of the new process image remain the same as those of the
 190        calling process image. The effective user ID and effective group ID of
 191        the new process image are saved (as the saved set-user-ID and the saved
 192        set-group-ID for use by setuid(2).
 193 
 194 
 195        The privilege sets are changed according to the following rules:
 196 
 197            1.     The inheritable set, I, is intersected with the limit set,
 198                   L.  This mechanism enforces the limit set for processes.
 199 
 200            2.     The effective set, E, and the permitted set, P, are made
 201                   equal to the new inheritable set.
 202 




 203 
 204        The system attempts to set the privilege-aware state to non-PA both
 205        before performing any modifications to the process IDs and privilege
 206        sets as well as after completing the transition to new UIDs and
 207        privilege sets, following the rules outlined in privileges(5).
 208 





 209 
 210        If the {PRIV_PROC_OWNER} privilege is asserted in the effective set,
 211        the set-user-ID and set-group-ID bits will be honored when the process is
 212        being controlled by ptrace(3C). Additional restriction can apply when
 213        the traced process has an effective UID of 0. See privileges(5).


 214 
 215 
 216        Any shared memory segments attached to the calling process image will
 217        not be attached to the new process image (see shmop(2)). Any mappings
 218        established through mmap() are not preserved across an exec. Memory
 219        mappings created in the process are unmapped before the address space
 220        is rebuilt for the new process image. See mmap(2).
 221 
 222 
 223        Memory locks established by the calling process via calls to
 224        mlockall(3C) or mlock(3C) are removed. If locked pages in the address
 225        space of the calling process are also mapped into the address spaces
 226        the locks established by the other processes will be unaffected by the
 227        call by this process to the exec function. If the exec function fails,
 228        the effect on memory locks is unspecified.
 229 
 230 
 231        If _XOPEN_REALTIME is defined and has a value other than 1, any named
 232        semaphores open in the calling process are closed as if by appropriate
 233        calls to sem_close(3C)
 234 
 235 
 236        Profiling is disabled for the new process; see profil(2).
 237 
 238 
 239        Timers created by the calling process with timer_create(3C) are deleted
 240        before replacing the current process image with the new process image.
 241 
 242 
 243        For the SCHED_FIFO and SCHED_RR scheduling policies, the policy and
 244        priority settings are not changed by a call to an exec function.
 245 


 246 
 247        All open message queue descriptors in the calling process are closed,
 248        as described in mq_close(3C).
 249 
 250 
 251        Any outstanding asynchronous I/O operations may be cancelled. Those
 252        asynchronous I/O operations that are not canceled will complete as if
 253        the exec function had not yet occurred, but any associated signal
 254        notifications are suppressed. It is unspecified whether the exec
 255        function itself blocks awaiting such I/O completion. In no event,
 256        however, will the new process image created by the exec function be
 257        affected by the presence of outstanding asynchronous I/O operations at
 258        the time the exec function is called.
 259 
 260 
 261        All active contract templates are cleared (see contract(4)).
 262 
 263 
 264        The new process also inherits the following attributes from the calling
 265        process:
 266 
 267            o      controlling terminal
 268 
 269            o      current working directory
 270 
 271            o      file-locks (see fcntl(2) and lockf(3C))
 272 
 273            o      file mode creation mask (see umask(2))
 274 
 275            o      file size limit (see ulimit(2))
 276 
 277            o      limit privilege set
 278 
 279            o      nice value (see nice(2))
 280 
 281            o      parent process ID
 282 
 283            o      pending signals (see sigpending(2))
 284 
 285            o      privilege debugging flag (see privileges(5) and
 286                   getpflags(2))
 287 
 288            o      process ID
 289 
 290            o      process contract (see contract(4) and process(4))
 291 
 292            o      process group ID
 293 
 294            o      process signal mask (see sigprocmask(2))
 295 
 296            o      processor bindings (see processor_bind(2))
 297 
 298            o      processor set bindings (see pset_bind(2))
 299 
 300            o      project ID
 301 
 302            o      real group ID
 303 
 304            o      real user ID
 305 
 306            o      resource limits (see getrlimit(2))
 307 
 308            o      root directory
 309 
 310            o      scheduler class and priority (see priocntl(2))
 311 
 312            o      semadj values (see semop(2))
 313 
 314            o      session membership (see exit(2) and signal(3C))
 315 
 316            o      supplementary group IDs
 317 
 318            o      task ID
 319 
 320            o      time left until an alarm clock signal (see alarm(2))
 321 
 322            o      tms_utime, tms_stime, tms_cutime, and tms_cstime (see
 323                   times(2))
 324 
 325            o      trace flag (see ptrace(3C) request 0)
 326 
 327 
 328        A call to any exec function from a process with more than one thread
 329        results in all threads being terminated and the new executable image
 330        being loaded and executed. No destructor functions will be called.
 331 
 332 
 333        Upon successful completion, each of the functions in the exec family
 334        marks for update the st_atime field of the file.  If an exec function
 335        failed but was able to locate the process image file, whether the
 336        st_atime field is marked for update is unspecified. Should the function
 337        succeed, the process image file is considered to have been opened with
 338        open(2). The corresponding close(2) is considered to occur at a time
 339        after this open, but before process termination or successful
 340        completion of a subsequent call to one of the exec functions. The
 341        argv[] and envp[] arrays of pointers and the strings to which those
 342        arrays point will not be modified by a call to one of the exec
 343        functions, except as a consequence of replacing the process image.
 344 
 345 
 346        The saved resource limits in the new process image are set to be a copy
 347        of the process's corresponding hard and soft limits.
 348 
 349 RETURN VALUES
 350        If a function in the exec family returns to the calling process image,
 351        an error has occurred; the return value is1 and errno is set to
 352        indicate the error.
 353 
 354 ERRORS
 355        The exec functions will fail if:
 356 
 357        E2BIG
 358                        The number of bytes in the new process's argument list
 359                        is greater than the system-imposed limit of {ARG_MAX}
 360                        bytes. The argument list limit is sum of the size of
 361                        the argument list plus the size of the environment's
 362                        exported shell variables.
 363 
 364 
 365        EACCES
 366                        Search permission is denied for a directory listed in
 367                        the new process file's path prefix.
 368 
 369                        The new process file is not an ordinary file.
 370 
 371                        The new process file mode denies execute permission.
 372 
 373                        The {FILE_DAC_SEARCH} privilege overrides the
 374                        restriction on directory searches.
 375 
 376                        The {FILE_DAC_EXECUTE} privilege overrides the lack of
 377                        execute permission.
 378 
 379 
 380        EAGAIN
 381                        Total amount of system memory available when reading
 382                        using raw I/O is temporarily insufficient.
 383 

 384 
 385        EFAULT
 386                        An argument points to an illegal address.
 387 
 388 
 389        EINVAL
 390                        The new process image file has the appropriate
 391                        permission and has a recognized executable binary
 392                        format, but the system does not support execution of a
 393                        file with this format.
 394 
 395 
 396        EINTR
 397                        A signal was caught during the execution of one of the
 398                        functions in the exec family.
 399 

 400 
 401        ELOOP
 402                        Too many symbolic links were encountered in translating
 403                        path or file.
 404 
 405 
 406        ENAMETOOLONG
 407                        The length of the file or path argument exceeds
 408                        {PATH_MAX}, or the length of a file or path component
 409                        exceeds {NAME_MAX} while {_POSIX_NO_TRUNC} is in
 410                        effect.
 411 
 412 
 413        ENOENT
 414                        One or more components of the new process path name of
 415                        the file do not exist or is a null pathname.
 416 
 417 
 418        ENOLINK
 419                        The path argument points to a remote machine and the
 420                        link to that machine is no longer active.
 421 
 422 
 423        ENOTDIR
 424                        A component of the new process path of the file prefix
 425                        is not a directory.
 426 
 427 
 428 
 429        The exec functions, except for execlp() and execvp(), will fail if:
 430 
 431        ENOEXEC
 432                   The new process image file has the appropriate access
 433                   permission but is not in the proper format.
 434 

 435 


 436 
 437        The exec functions may fail if:
 438 
 439        ENAMETOOLONG
 440                        Pathname resolution of a symbolic link produced an

 441                        intermediate result whose length exceeds {PATH_MAX}.
 442 
 443 
 444        ENOMEM
 445                        The new process image requires more memory than is
 446                        allowed by the hardware or system-imposed by memory
 447                        management constraints. See brk(2).
 448 
 449 
 450        ETXTBSY
 451                        The new process image file is a pure procedure (shared
 452                        text) file that is currently open for writing by some
 453                        process.
 454 
 455 
 456 USAGE
 457        As the state of conversion descriptors and message catalogue
 458        descriptors in the new process image is undefined, portable
 459        applications should not rely on their use and should close them prior
 460        to calling one of the exec functions.
 461 



 462 
 463        Applications that require other than the default POSIX locale should
 464        call setlocale(3C) with the appropriate parameters to establish the
 465        locale of thenew process.
 466 
 467 
 468        The environ array should not be accessed directly by the application.

 469 
 470 ATTRIBUTES
 471        See attributes(5) for descriptions of the following attributes:






 472 


 473 


 474 



 475 
 476        +--------------------+-------------------+
 477        |  ATTRIBUTE TYPE    |  ATTRIBUTE VALUE  |
 478        +--------------------+-------------------+
 479        |Interface Stability | Committed         |
 480        +--------------------+-------------------+
 481        |MT-Level            | See below.        |
 482        +--------------------+-------------------+
 483        |Standard            | See standards(5). |
 484        +--------------------+-------------------+
 485 


 486 
 487        The execle() and execve() fucntions are Async-Signal-Safe.
 488 
 489 SEE ALSO
 490        ksh(1), ps(1), sh(1), alarm(2), brk(2), chmod(2), exit(2), fcntl(2),
 491        fork(2), getpflags(2), getrlimit(2), memcntl(2), mmap(2), nice(2),
 492        priocntl(2), profil(2), semop(2), shmop(2), sigpending(2),
 493        sigprocmask(2), times(2), umask(2), lockf(3C), ptrace(3C),
 494        setlocale(3C), signal(3C), system(3C), timer_create(3C), a.out(4),
 495        contract(4), process(4), attributes(5), environ(5), privileges(5),
 496        standards(5)
 497 
 498 WARNINGS
 499        If a program is setuid to a user ID other than the superuser, and the
 500        program is executed when the real user ID is super-user, then the
 501        program has some of the powers of a super-user as well.
 502 
 503 
 504 
 505                                  June 16, 2008                         EXEC(2)
   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