Fork (operating system)
|
- This article is about "forking" a process in a multitasking or multithreading operating system.
- For other uses, see Fork (disambiguation).
A fork, when applied to computing is when a process creates a copy of itself, which then acts as a "child" of the original process, now called the "parent". More generally, a fork in a multithreading environment means that a thread of execution is duplicated.
Under Unix and Unix-like operating systems, the parent and the child operations are selected by examining the return value of the fork() system call. In the child process, the return value of fork() is 0, whereas the return value in the parent process is the PID of the newly created child process.
Example
Here is some sample C programming language code to illustrate the idea of forking. The code that is in the "Child process" and "Parent process" sections are executed simultaneously.
int i, pid; pid = fork(); if(pid == 0) { /* Child process: * When fork() returns 0, we are in * the child process. * Here we count up to ten, one each second. */ int j; for(j=0; j < 10; j++) { printf("child: %d\n", j); sleep(1); } _exit(0); /* Note that we do not use exit() */ } else if(pid > 0) { /* Parent process: * Otherwise, we are in the parent process. * Again we count up to ten. */ int i; for(i=0; i < 10; i++) { printf("parent: %d\n", i); sleep(1); } } else { /* Error handling. */ fprintf(stderr, "couldn't fork"); exit(1); }
This code will print out the following:
parent: 0 child: 0 child: 1 parent: 1 parent: 2 child: 2 child: 3 parent: 3 parent: 4 child: 4 child: 5 parent: 5 parent: 6 child: 6 child: 7 parent: 7 parent: 8 child: 8 child: 9 parent: 9
The order of each output is determined by the kernel.
Mythos
In many operating systems, forking was dangerous because it had the potential to completely shut down a system if it ran in a loop. Here is an example:
while(1) fork();
Code that reduces to this will have the same effect.
This difficulty has created a mythos around the fork command. It can be used similar to the F-word, with or without parenthesis, "Go fork() yourself." It has permeated much of the computer science pop-culture, an example of this is the many references to The Matrix's Agent Smith using a fork() command. ThinkGeek created a "Fork Agent Smith" shirt, but has since been discontinued.