Exec (system call)


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

Nomenclature

Interfaces to and its implementations vary. Depending on programming language it may be accessible via one or more functions, and depending on operating system it may be represented with one or more actual system calls. For this reason, is sometimes described as a collection of functions.
In C, there is no single, plain function.
High-level programming languages usually provide one call named.

In POSIX systems, other Unix-like systems, and other multitasking systems

C language prototypes

The POSIX standard declares a family of functions in the header file. The same functions are declared in for DOS, OS/2, and Microsoft Windows.

int execl;
int execle;
int execlp;
int execv;
int execve;
int execvp;
int execvpe;
int fexecve;

Some implementations provide these functions named with a leading underscore.
The base of each is, followed by one or more letters:
  • - Environment variables are passed as an array of pointers to null-terminated strings of form. The final element of the array must be a null pointer.
  • - Command-line arguments are passed as individual pointers to null-terminated strings. The last argument must be a null pointer.
  • - Uses the PATH environment variable to find the file named in the argument to be executed.
  • - Command-line arguments are passed as an array of pointers to null-terminated strings. The final element of the array must be a null pointer.
  • - A file descriptor is passed instead. The file descriptor must be opened with or and the caller must have permission to execute its file.
In functions where no environment variables can be passed, the new process image inherits the current environment variables.

First command-line argument

The first argument is often the name of the executable file and may be the same value as the argument. However, this is purely convention and there is no guarantee of this behavior, nor is it standardized. For instance, in Java, the first argument is not the path to the executable, but instead the first argument for the program.

Effects

A file descriptor open when an call is made remains open in the new process image, unless [fcntl|] was called with or opened with . This aspect is used to specify the standard streams of the new program.
A successful overlay destroys the previous memory address space of the process. All of its memory areas that were not shared are reclaimed by the operating system. Consequently, all its data that were not passed to the new program, or otherwise saved, are lost.

Return value

A successful call 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 the call fails, the return value is always, and [errno|] is set to an appropriate value.

In DOS

is not a multitasking operating system, but replacing the previous executable image is essential due to harsh primary memory limitations and lack of virtual memory. The same API is used for overlaying programs in DOS and it has effects similar to ones on POSIX systems.
MS-DOS functions always load the new program into memory as if the "maximum allocation" in the program's executable file header is set to default value of 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 functions, the program might behave differently from a program invoked directly from the operating-system command line or with one of the functions.

In shells

Many Unix shells also offer a builtin command that replaces the shell process with the specified program. Wrapper scripts often use this command to run a program after setting environment variables or other configuration. By using, 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. In some shells, it is possible to use it for redirection only, without making an actual overlay.

In other systems

include a system call that performs a similar function to exec.

Exec versus spawn

The traditional Unix system does not have the functionality to create a new process running a new executable program in one step. Other systems may use [spawn (computing)|] 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|] routines as an optional extension.