blob: 66ca8f51de47bf2792b5151cf72430fe95b01060 [file] [log] [blame] [view]
# Zircon fundamentals
<<../../_common/intro/_zircon_intro.md>>
<<../../_common/intro/_zircon_syscall.md>>
<<../../_common/intro/_zircon_processes.md>>
<<../../_common/intro/_zircon_ipc.md>>
## Exercise: Jobs and processes
Let's explore some of these fundamental concepts on a running system. In
this exercise, you'll see how jobs and processes interact to form a tree.
<<../_common/_start_femu.md>>
### Dump the process list
Connect to a device shell prompt and use the `ps` command to dump the list of
running jobs and processes.
```posix-terminal
fx shell ps
```
Below is a trimmed example of what the output looks like:
```none {:.devsite-disable-click-to-copy}
TASK PSS PRIVATE SHARED STATE NAME
j: 1027 507.8M 507.4M root
p: 1061 564.4k 564k 36k bin/bootsvc
p: 1150 4264.4k 4264k 36k bin/component_manager
j: 1479 228.4k 228k
p: 1583 228.4k 228k 36k pwrbtn-monitor.cm
j: 1484 532.4k 532k
p: 1599 532.4k 532k 36k svchost.cm
j: 1544 402.4k 304k
p: 1633 402.4k 304k 232k netsvc.cm
j: 1681 296.4k 296k
p: 1733 296.4k 296k 36k console-launcher.cm
j: 1799 7232.4k 7232k
p: 1825 7232.4k 7232k 36k archivist.cm
j: 1927 660.4k 660k
p: 1955 660.4k 660k 36k base-resolver.cm
j: 2072 1016.4k 1016k
p: 2088 1016.4k 1016k 36k driver_manager.cm
j: 2239 348.4k 348k
p: 2252 348.4k 348k 36k device-name-provider.cm
j: 2364 275.3M 275.3M
p: 2380 1012.4k 1012k 36k fshost.cm
p: 6544 252.1M 252.1M 36k /pkg/bin/blobfs
p: 10205 9744.4k 9744k 36k /pkg/bin/minfs
p: 10475 12.8M 12.8M 36k pkgfs
```
Let's focus on two columns in the output for now:
* **TASK**: This tells you whether each entry is a job (`j`) or process (`p`)
followed by their unique id.
* **NAME**: This provides a little more detail about what piece of the system
is running there.
Let's break down some interesting things here based on what we've discussed so
far:
1. Every process is connected to a parent job. Some jobs have multiple
processes.
1. All jobs trace back to the `root` job as the ultimate parent, forming a tree.
1. During startup, the system launches a few processes directly into the `root` job.
Most other processes are launched under their own parent jobs.
1. After the initial startup work, many of the entries have a `.cm` extension. These
refer to **components**, and you will learn more about them later on.
1. Some of these components are core services like filesystems (`fshost.cm`) and
drivers (`driver_manager.cm`) that live in user space separate from the
kernel.
Next, we'll explore how the Zircon enables the fundamentals of Fuchsia's
security model.
<aside class="key-point">
<b>Extra Credit: Fuchsia Startup</b>
<p>Exploring the tree of running processes is also a great way to learn about
the startup process of a Fuchsia device. Take a moment to review
<a href="/docs/concepts/process/everything_between_power_on_and_your_component.md">
device startup</a> and map how the initial processes align with the
<code>ps</code> output on the emulator.</p>
</aside>