- Exec (operating system)
The exec functions of Unix-like
operating systems are a collection of functions that causes the running process to be completely replaced by the program passed as argument to the function. As a new process is not created, the process ID (PID) does not change across and execute, but the data, heap and stack of the calling process are replaced by those of the new process.In the "execl", "execlp", "execv", and "execvp" calls, the child process inherits the parent's environment.
Files open when an "exec" call is made remain open in the new process. All open files must be flushed before an "exec" call.The "exec" calls do not preserve the translation modes of open files. If the child process uses files inherited from the parent, "
setmode " function can be called to set the translation mode to the desired mode.In
MS-DOS environments, a program executed with one of the "exec" functions is always loaded 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.Many
Unix shell s also offer an "exec" built-in command that replaces the shell process with the specified program. [http://www.gnu.org/software/bash/manual/bashref.html#IDX74 - "exec" built-in command in bash manual] "Wrapper" scripts often use this command to run a program (either directly or through an interpreter orvirtual 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. [http://tldp.org/LDP/abs/html/wrapper.html]Prototypes
The functions are declared in
unistd.h
forPOSIX standard and in
for DOS, OS/2, Windows.process.h :
int execl(const char *path, const char *arg0, ...);
:int execle(const char *path, const char *arg0, ..., const char *const *envp);
:int execlp(const char *path, const char *arg0, ...);
:int execlpe(const char *path, const char *arg0, ...);
:int execv(const char *path, const char *const *argv);
:int execve(const char *path, const char *const *argv, const char *const *envp);
:int execvp(const char *path, const char *const *argv);
:int execvpe(const char *path, const char *const *argv, const char *const *envp);
*"Note: Some implementations provide these functions named with a leading underscore (e.g. _execl)".
Function names
The base of each function is exec, followed by one or more letters::e - An array of pointers to environment arguments is explicitly passed to the child process. :l -
Command-line argument s are passed individually to the function. :p - Uses thepath
argument variable to find the file to be executed. :v - Command-line arguments are passed to the function as an array of pointers.Path
The
path
argument specifies the path name of the file to execute as a child process. Argumentsarg0
throughargn
are a list of pointers to arguments to be passed to the child process.argv
is an array of pointers to arguments.Envp
Argument
envp
is an array of pointers to environment settings. Theexecle
,execlpe
,execve
, and execvpe calls alter the environment for the child process by passing a list of environment settings through theenvp
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, andvalue
is the value of that that variable. The final element of theenvp
array must be null. Ifenvp
itself is null, the child process inherits the environment settings of the parent process.Return Value
The "exec" functions do not normally return to the calling process. If an exec function returns, an error occurred, the return value is -1, and
errno is set to one of the following values:ee also
*Exit
*Fork
*Fork-exec
*Overlay
*Path (variable)
*SpawnReferences
External links
*man|sh|exec|SUS|execute a file
Wikimedia Foundation. 2010.