Execve
   HOME

TheInfoList



OR:

In computing, exec is a functionality of an operating system that runs an executable file in the context of an already existing process (computing), process, replacing the previous executable. This act is also referred to as an overlay. It is especially important in Unix-like systems, although it exists elsewhere. As no new process is created, the process identifier (PID) does not change, but the machine code, data (computing), data, heap (programming), heap, and run-time stack, stack of the process are replaced by those of the new program. The ''exec'' call is available for many programming languages including compiler, compilable languages and some scripting languages. In operating system shell, OS command interpreters, the shell builtin, built-in command replaces the shell process with the specified program.


Nomenclature

Interfaces to ''exec'' and its implementations vary. Depending on programming language it may be accessible via one or more function (programming), functions, and depending on operating system it may be represented with one or more actual system calls. For this reason ''exec'' is sometimes described as a ''collection of functions''. Standard names of such functions in C (programming language), C are , , , , , and (see #C language prototypes, below), but not "exec" itself. The Linux kernel has one corresponding system call named "execve", whereas all aforementioned functions are wrapper library, user-space wrappers around it. high-level programming language, Higher-level languages usually provide one call named .


Unix, POSIX, and other multitasking systems


C language prototypes

The POSIX standard declares ''exec'' functions in the header file, in the C (programming language), C language. The same functions are declared in for DOS (see #DOS operating systems, below), OS/2, and Microsoft Windows. :int execl(char const *path, char const *arg0, ...); :int execle(char const *path, char const *arg0, ..., char const *envp[]); :int execlp(char const *file, char const *arg0, ...); :int execv(char const *path, char const *argv[]); :int execve(char const *path, char const *argv[], char const *envp[]); :int execvp(char const *file, char const *argv[]); :int fexecve(int fd, char *const argv[], char *const envp[]); Some implementations provide these functions named with a leading underscore (e.g. _execl). The base of each is exec (execute), followed by one or more letters: :e – An array of pointers to environment variables is explicitly passed to the new process image. :l – Command-line interface#Arguments section, Command-line arguments are passed individually (a list) to the function. :p – Uses the PATH (variable), PATH environment variable to find the file named in the ''file'' argument to be executed. :v – Command-line arguments are passed to the function as an array (vector) of pointers. ; path The argument specifies the path name of the file to execute as the new process image. Arguments beginning at ''arg0'' are pointer (computer programming), pointers to arguments to be passed to the new process image. The ''argv'' value is an array of pointers to arguments. ; arg0 The first argument ''arg0'' should be the name of the executable file. Usually it is the same value as the ''path'' argument. Some programs may incorrectly rely on this argument providing the location of the executable, but there is no guarantee of this nor is it standardized across platforms. ; envp Argument ''envp'' is an array of pointers to environment settings. The ''exec'' calls named ending with an ''e'' alter the environment for the new process image by passing a list of environment settings through the ''envp'' argument. This argument is an array of character pointers; each element (except for the final element) points to a null-terminated string defining an environment variable. Each null-terminated string has the form: :name=value where ''name'' is the environment variable name, and ''value'' is the value of that variable. The final element of the ''envp'' array must be null pointer, null. In the , , , and calls, the new process image inherits the current environment variables.


Effects

A file descriptor open when an ''exec'' call is made remains open in the new process image, unless was ed with FD_CLOEXEC or opened with O_CLOEXEC (the latter was introduced in POSIX.1-2001). This aspect is used to specify the standard streams (stdin, stdout and stderr) of the new program. A successful overlay destroys the previous memory address space of the process, and all its memory areas, that were not Shared memory (interprocess communication), shared, are reclaimed by the operating system. Consequently, all its data that were not passed to the new program, or otherwise saved, become lost.


Return value

A successful ''exec'' replaces the current process image, so it cannot return anything to the program that made the call. Processes do have an exit status, but that value is collected by the parent process. If an exec function does return to the calling program, an error occurs, the return value is −1, and errno is set to one of the following values:


DOS operating systems

DOS is not a computer multitasking, multitasking operating system, but replacing the previous executable image has a great merit there due to harsh primary memory limitations and lack of virtual memory. #C language prototypes, The same API is used for overlaying programs in DOS and it has effects similar to ones on POSIX systems. MS-DOS ''exec'' functions always load the new program into memory as if the "maximum allocation" in the program's DOS MZ executable, executable file header is set to default value 0xFFFF. The EXEHDR utility can be used to change the maximum allocation field of a program. However, if this is done and the program is invoked with one of the ''exec'' functions, the program might behave differently from a program invoked directly from the operating-system command line or with one of the ''spawn'' functions (see #Alternatives, below).


Command interpreters

Many Unix shells also offer a builtin command that replaces the shell process with the specified program. Wrapper function, Wrapper scripts often use this command to run a program (either directly or through an interpreter (computing), interpreter or virtual machine) after setting environment variables or other configuration. By using ''exec'', the resources used by the shell program do not need to stay in use after the program is started. The command can also perform a redirection (computing), redirection. In some shells it is even possible to use the command for redirection only, without making an actual overlay.


Alternatives

The traditional Unix system does not have the functionality to create a new process running a new executable program in one step, which explains the importance of ''exec'' for Unix programming. Other systems may use ''spawn (computing), spawn'' as the main tool for running executables. Its result is equivalent to the fork–exec sequence of Unix-like systems. POSIX supports the Spawn (computing)#POSIX spawn functions, ''posix_spawn'' routines as an optional extension that usually is implemented using vfork.


Other Systems

OS/360 and successors include a system call XCTL (transfer control) that performs a similar function to exec.


See also

*Chain loading, overlaying in system programming *exit (system call), terminate a process *fork (system call), make a new process (but with the same executable) *fork (system call)#Linux clone syscall, clone(), the way to create new threads *PATH (variable), related to semantics of the argument


References


External links

*{{man, sh, exec, SUS, execute a file Process (computing) POSIX Process.h Unix SUS2008 utilities System calls