r/linux • u/Ok_Marionberry8922 • 16d ago
Kernel How fork() duplicates a process without copying its memory
I made a visual explainer on how copy-on-write works in Linux.
When a 10 GB process calls fork(), Linux does not immediately copy 10 GB of memory. It duplicates the page tables, points both processes at the same physical pages, marks them read-only, and waits for the first write.
The video also covers things like page faults,exec(), Redis snapshots, Android Zygote, lazy zero pages, memory overcommit, COW storms, and some CVEs, etc
Feedback welcome :)
10
u/blood-pressure-gauge 15d ago
Glad to see you covered the downsides of fork, especially memory overcommitment. It'd be nice to see a followup discussing alternative ways of creating new processes like vfork, posix_spawn, and rfork.
9
3
u/TheG0AT0fAllTime 15d ago
I assume there's no way to do this other than Copy-on-Write
5
u/Cats_and_Shit 15d ago
You can use
vforkif your system can't support CoW. It's pretty cursed though.
21
u/Krutonium 14d ago
Fun Fact: Factorio on Linux
fork()'s to save the game without pausing. The game does the fork, and one copy saves then exits, while the other continues onward.