Roll src/third_party/WebKit 9f7fb92:f103b33 (svn 202621:202622)
[chromium-blink-merge.git] / docs / linux_zygote.md
blob5504115d04c6d74cee567b6a860c1373165949d5
1 A zygote process is one that listens for spawn requests from a master process
2 and forks itself in response. Generally they are used because forking a process
3 after some expensive setup has been performed can save time and share extra
4 memory pages.
6 On Linux, for Chromium, this is not the point, and measurements suggest that the
7 time and memory savings are minimal or negative.
9 We use it because it's the only reasonable way to keep a reference to a binary
10 and a set of shared libraries that can be exec'ed. In the model used on Windows
11 and Mac, renderers are exec'ed as needed from the chrome binary. However, if the
12 chrome binary, or any of its shared libraries are updated while Chrome is
13 running, we'll end up exec'ing the wrong version. A version _x_ browser might be
14 talking to a version _y_ renderer. Our IPC system does not support this (and
15 does not want to!).
17 So we would like to keep a reference to a binary and its shared libraries and
18 exec from these. However, unless we are going to write our own `ld.so`, there's
19 no way to do this.
21 Instead, we exec the prototypical renderer at the beginning of the browser
22 execution. When we need more renderers, we signal this prototypical process (the
23 zygote) to fork itself. The zygote is always the correct version and, by
24 exec'ing one, we make sure the renderers have a different address space
25 randomisation than the browser.
27 The zygote process is triggered by the `--type=zygote` command line flag, which
28 causes `ZygoteMain` (in `chrome/browser/zygote_main_linux.cc`) to be run. The
29 zygote is launched from `chrome/browser/zygote_host_linux.cc`.
31 Signaling the zygote for a new renderer happens in
32 `chrome/browser/child_process_launcher.cc`.
34 You can use the `--zygote-cmd-prefix` flag to debug the zygote process. If you
35 use `--renderer-cmd-prefix` then the zygote will be bypassed and renderers will
36 be exec'ed afresh every time.