<<../../_common/intro/_zircon_intro.md>>
<<../../_common/intro/_zircon_syscall.md>>
<<../../_common/intro/_zircon_processes.md>>
<<../../_common/intro/_zircon_ipc.md>>
让我们在运行中的系统上探索这些基础概念。 在本练习中,您将看到作业与进程间是如何交互以形成一棵树的。
<<../_common/_start_femu.md>>
连接到设备命令行,并使用 ps
命令导出运行中的作业和进程的列表。
fx shell ps
下面是一个截断的输出样例:
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
我们暂时关注其中两列:
- TASK(任务):这一列告诉您每个条目是作业(
j
)还是进程(p
),其后紧接着它的唯一 id。 - NAME(名称):这一列提供了稍多的详细信息,告诉您正在运行的是系统的哪一部分。
基于之前讨论的内容,我们可以发现一些有趣的事情:
- 每个进程都连接到一个父作业。有些作业有多个进程。
- 所有作业都能追溯到
root
这个终极作业,形成了一棵树。 - 在系统启动时,有一些进程直接在
root
作业中启动。大多数其他进程会在它们自己的父作业中启动。 - 在系统启动的初始阶段之后,有许多条目带有
.cm
的扩展名。它们指的是 组件(component)。 您将在稍后了解有关组件的更多知识。 - 有些组件是核心服务,它们独立于内核而存在于用户空间,如文件系统(
fshost.cm
)和驱动(driver_manager.cm
)。
接下来,我们将探索 Zircon 如何奠定了 Fuchsia 安全模型的基础。
附加题:Fuchsia 启动探索运行中的进程树也是了解 Fuchsia 设备启动过程的好方法。
请稍微花些时间回顾一下
设备启动,并比较初始启动过程与模拟器上 ps
的输出是否相符。