Fork-exec
Encyclopedia
Fork-exec is a commonly used technique in Unix
whereby an executing process
spawns a new program. fork
is the name of the system call
that the parent process
uses to "divide" itself ("fork" into two identical processes). After calling fork, the created child process
is an exact copy of the parent except for the return value. This is probably of limited use, so the child usually transfers to another program using the system call exec
.
When a process forks, a complete copy of the executing program is made into the new process. This new process (which is a child of the parent) has a new process identifier
(PID). The fork function returns the child's PID to the parent, while it returns 0 to the child, in order to allow the two identical processes to distinguish one another.
The parent process can either continue execution or wait for the child process to complete. The child, after discovering that it is the child, replaces itself completely with another program, so that the code and address space
of the original program are lost.
If the parent chooses to wait for the child to die, then the parent will receive the exit code of the program that the child executed. Otherwise, the parent can ignore the child process and continue executing as it normally would; to prevent the child becoming a zombie
it should wait
on children at intervals or on SIGCHLD
.
When the child process calls exec, all data in the original program is lost, and replaced with a running copy of the new program. This is known as overlaying
. Although all data is replaced, the file descriptor
s that were open in the parent are closed only if the program has explicitly marked them close-on-exec. This allows for the common practice of the parent creating a pipe
prior to calling fork and using it to communicate with the executed program.
Windows does not support the fork-exec technique as it does not allow to fork a process. The spawn
family of functions declared in process.h
can replace it in cases where the call to fork is followed directly by exec.
Unix
Unix is a multitasking, multi-user computer operating system originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, and Joe Ossanna...
whereby an executing process
Process (computing)
In computing, a process is an instance of a computer program that is being executed. It contains the program code and its current activity. Depending on the operating system , a process may be made up of multiple threads of execution that execute instructions concurrently.A computer program is a...
spawns a new program. fork
Fork (operating system)
In computing, when a process forks, it creates a copy of itself. More generally, a fork in a multithreading environment means that a thread of execution is duplicated, creating a child thread from the parent thread....
is the name of the system call
System call
In computing, a system call is how a program requests a service from an operating system's kernel. This may include hardware related services , creating and executing new processes, and communicating with integral kernel services...
that the parent process
Parent process
In computing, a parent process is a process that has created one or more child processes.- Unix :In the operating system Unix, every process except is created when another process executes the fork system call. The process that invoked fork is the parent process and the newly-created process is...
uses to "divide" itself ("fork" into two identical processes). After calling fork, the created child process
Child process
A child process in computing is a process created by another process .A child process inherits most of its attributes, such as open files, from its parent. In UNIX, a child process is in fact created as a copy of the parent...
is an exact copy of the parent except for the return value. This is probably of limited use, so the child usually transfers to another program using the system call exec
Exec (operating system)
The exec collection of functions of Unix-like operating systems cause the running process to be completely replaced by the program passed as an argument to the function...
.
When a process forks, a complete copy of the executing program is made into the new process. This new process (which is a child of the parent) has a new process identifier
Process identifier
In computing, the process identifier is a number used by most operating system kernels to uniquely identify a process...
(PID). The fork function returns the child's PID to the parent, while it returns 0 to the child, in order to allow the two identical processes to distinguish one another.
The parent process can either continue execution or wait for the child process to complete. The child, after discovering that it is the child, replaces itself completely with another program, so that the code and address space
Address space
In computing, an address space defines a range of discrete addresses, each of which may correspond to a network host, peripheral device, disk sector, a memory cell or other logical or physical entity.- Overview :...
of the original program are lost.
If the parent chooses to wait for the child to die, then the parent will receive the exit code of the program that the child executed. Otherwise, the parent can ignore the child process and continue executing as it normally would; to prevent the child becoming a zombie
Zombie process
On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution but still has an entry in the process table. This entry is still needed to allow the process that started the process to read its exit status. The term zombie process...
it should wait
Wait (operating system)
In modern computer operating systems, a process may wait on another process to complete its execution. In most systems, a parent process can create an independently executing child process. The parent process may then issue a wait system call, which suspends the execution of the parent process...
on children at intervals or on SIGCHLD
SIGCHLD
On POSIX-compliant platforms, SIGCHLD is the signal sent to a process when a child process terminates. The symbolic constant for SIGCHLD is defined in the header file signal.h. Symbolic signal names are used because signal numbers can vary across platforms....
.
When the child process calls exec, all data in the original program is lost, and replaced with a running copy of the new program. This is known as overlaying
Overlay (operating system)
In operating systems, an overlay is when a process replaces itself with the code of another program. On Unix-like systems, this is accomplished with the exec system call....
. Although all data is replaced, the file descriptor
File descriptor
In computer programming, a file descriptor is an abstract indicator for accessing a file. The term is generally used in POSIX operating systems...
s that were open in the parent are closed only if the program has explicitly marked them close-on-exec. This allows for the common practice of the parent creating a pipe
Pipeline (Unix)
In Unix-like computer operating systems , a pipeline is the original software pipeline: a set of processes chained by their standard streams, so that the output of each process feeds directly as input to the next one. Each connection is implemented by an anonymous pipe...
prior to calling fork and using it to communicate with the executed program.
Windows does not support the fork-exec technique as it does not allow to fork a process. The spawn
Spawn (computing)
Spawn in computing refers to a function that loads and executes a new child process.The current process may or may not continue to execute asynchronously...
family of functions declared in process.h
Process.h
process.h is a C header file which contains function declarations and macros used in working with threads and processes. Most C compilers that target DOS, Windows 3.1x, Win32, OS/2, Novell NetWare or DOS extenders supply this header and the library functions in their C library...
can replace it in cases where the call to fork is followed directly by exec.
See also
- forkFork (operating system)In computing, when a process forks, it creates a copy of itself. More generally, a fork in a multithreading environment means that a thread of execution is duplicated, creating a child thread from the parent thread....
- execExec (operating system)The exec collection of functions of Unix-like operating systems cause the running process to be completely replaced by the program passed as an argument to the function...
- spawnSpawn (computing)Spawn in computing refers to a function that loads and executes a new child process.The current process may or may not continue to execute asynchronously...