exec (system call)
This article needs additional citations for verification. (February 2024) |
In
The exec call is available for many
Nomenclature
Interfaces to exec and its implementations vary. Depending on
Standard names of such functions in C are execl, execle, execlp, execv, execve, and execvp (see below), but not "exec" itself. The Linux kernel has one corresponding system call named "execve", whereas all aforementioned functions are user-space wrappers around it.
Higher-level languages usually provide one call named exec.
Unix, POSIX, and other multitasking systems
C language prototypes
The POSIX standard declares exec functions in the unistd.h header file, in the C language. The same functions are declared in process.h for DOS (see 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 arguments are passed individually (a list) to the function.
- p – Uses the 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 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.
In the execl, execlp, execv, and execvp calls, the new process image inherits the current environment variables.
Effects
A
A successful overlay destroys the previous
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
Name | Notes |
---|---|
E2BIG | The argument list exceeds the system limit. |
EACCES | The specified file has a locking or sharing violation. |
ENOENT | The file or path name not found. |
ENOMEM | Not enough memory is available to execute the new process image. |
DOS operating systems
MS-DOS exec 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 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 below).
Command interpreters
Many Unix shells also offer a builtin exec command that replaces the shell process with the specified program.[1] Wrapper scripts often use this command to run a program (either directly or through an 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.[2]
The exec command can also perform a redirection. In some shells it is even possible to use the exec command for redirection only, without making an actual overlay.
Alternatives
The traditional
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)
- clone(), the way to create new threads
- PATH (variable), related to semantics of the *path argument
References
- ^ a b "exec(3) - Linux manual page". man7.org. Retrieved 2016-10-14.
- ^ "Shell Wrappers". Linux Documentation Project. 2014-03-10. Retrieved 2021-02-18.
External links
- The Single UNIX Specification, Version 4 from The Open Group : execute a file – System Interfaces Reference,