Beginner Topic 15 of 51 Operating Systems
Fork and Exec
Unix primitives for creating processes and loading programs.
How it works
On Unix, fork creates a new process by duplicating the calling process, with the child receiving a copy of the address space, implemented lazily with copy-on-write, and returning 0 in the child and the child's PID in the parent. Exec replaces the current process image with a new program while keeping the PID and open files. The parent can wait for the child to finish. Shells run commands with fork then exec.
Step-by-step walkthrough
- The shell calls fork().
- The kernel makes a child that is a copy of the parent.
- The child calls exec("ls").
- The kernel replaces the child's memory with the new program.
- The parent calls wait() until the child exits.
Where it is used
Launching programs, building servers that spawn workers, setting up pipes and redirection between fork and exec and daemonizing services use this pair.
Common pitfall
Forking a multi-threaded program copies only the calling thread, which can leave locks held in inconsistent states. Not reaping children creates zombies. Forgetting to close file descriptors leaks them into children. Forking large processes costs time, so use posix_spawn or vfork-style calls where appropriate.
Where it fits in the course
Fork and Exec is topic 15 of 51 in Operating Systems, rated Beginner. It follows Shell and Command Line. The next topic is Inter-Process Communication.
Practice and explore
- Open the interactive lesson, with a mini quiz.
- Take the Operating Systems quiz.
How to study this topic
- Read the explanation above and restate the definition in your own words.
- Open the interactive lesson and answer its mini quiz.
- Read the common pitfall, then write a short example that avoids it.
- Check your understanding in the Operating Systems quiz, and revisit the topic if you miss a question.
Frequently asked questions
What is Fork and Exec?
Where do people use Fork and Exec?
What is the most common mistake with Fork and Exec?
What should I learn before this topic?
How can I practice it?
Is Fork and Exec hard to learn?
How long does it take to learn Fork and Exec?
Which topics are related to Fork and Exec?
What should I study after Fork and Exec?
Related topics
- Shell and Command Line (Operating Systems)
- Inter-Process Communication (Operating Systems)
- Priority Scheduling (Operating Systems)
- Pipes and Signals (Operating Systems)
- Fork-Join Model (Concurrency & Parallelism)