launchd
简要回答
launchd是macOS开机时启动的第一个进程,进程ID为1。系统上和每个用户下运行的后台服务、代理和许多其他进程,都由它启动和管理。
Mac开机时,内核启动launchd,launchd再启动几乎所有其他东西。它还会按需启动服务,比如某个App请求时;系统服务意外停止时,它也会将其重新启动。
在活动监视器中,你通常只会看到一个launchd,即PID为1的那个。它平时占用的CPU和内存都很少。
本页内容
launchd为什么CPU占用高
launchd本身很少做繁重的工作。它看起来很忙时,往往是在反复启动进程,例如某个后台项目不断崩溃又被重新启动。
在活动监视器中找一个反复出现又消失的进程,或者查看“系统设置”→“通用”→“登录项”,看看哪些后台项目被允许运行。关掉一个不需要的后台项目,是安全的第一步。
为什么不应该退出launchd
系统launchd是整个系统的父进程,无法用常规方式退出;而停止用户的launchd会结束你的会话。应该去修复它反复启动的那个进程。
如何找出launchd背后的登录项
launchd看起来很忙时,真正的问题是它在反复启动什么。先检查你允许运行的后台项目。
- 选取苹果菜单>“系统设置”,点按边栏中的“通用”,然后点按“登录项与扩展”。
- 逐一查看登录时打开的项目,以及允许在后台运行的App列表。任何你不认识或不再使用的项目都值得怀疑。
- 一次关闭一个项目,同时在活动监视器中观察launchd。如果它的CPU占用降下来了,你就找到了那个项目。
- 如果该项目属于你仍在使用的App,就更新这个App或检查它自己的设置。如果你已不再使用这个App,而它带有卸载程序,就用它自带的卸载程序卸载。
如何发现不断重启的服务
一个崩溃后又被重新启动的服务,会在活动监视器中出现片刻、消失,然后带着新的PID再次出现。在“CPU”标签页中按PID从高到低排序,更容易捕捉到它们,因为每次重新启动都会得到一个更大的编号。
在“终端”中,launchctl list会分三列显示launchd为你的账户载入的任务:任务正在运行时的PID、上次的退出状态,以及标签。第一列是短横线,表示该任务此刻没有运行。负数状态是停止该任务的信号,很多Apple任务都会显示负数,因为macOS会有意停止闲置的服务,所以单凭非零状态并不能说明有问题。
对于你怀疑的标签,运行launchctl print gui/$(id -u)/<label>。输出中有一行runs,即launchd启动该任务的次数。如果每次查看这个数字都在增加,说明该任务陷入了重启循环。这些命令只读取信息。
第三方后台项目存放在哪里
launchd会从几个文件夹中读取任务定义。Apple自己的任务在/System/Library/LaunchAgents和/System/Library/LaunchDaemons中,这些不要动。其他App安装的项目通常在以下文件夹中:
~/Library/LaunchAgents:仅适用于你的用户账户的代理。/Library/LaunchAgents:适用于所有用户的代理,由管理员或App安装器安装。/Library/LaunchDaemons:系统范围的守护进程,由管理员或App安装器安装。
守护进程、代理和XPC服务
launchd运行好几种任务,这些名称会出现在活动监视器和launchctl的输出中。守护进程(daemon)是系统范围的服务,整台Mac上的所有人共用一份,不显示任何界面。代理(agent)为每个已登录的用户分别运行,可以与该用户交互。
launchd还管理XPC服务,即捆绑在App和框架中的小型帮助程序。当App把工作交给其中一个时,launchd会按需启动它,它在活动监视器中会显示为独立的进程。这也是你使用App时,名字陌生的进程时有时无的原因之一。
常见问题
Mac上的launchd是什么?
它是macOS的服务管理器,是开机时启动的第一个进程,并负责启动和监管大多数其他进程。
为什么有好几个launchd进程?
系统有一个(PID 1),每个用户会话还各有一个实例。这是正常的。
可以强制退出launchd吗?
不可以。系统的其余部分都靠它运行。如果它看起来很忙,就去找那个不断重启的后台项目。
launchd是病毒吗?
不是。launchd是macOS的一部分,始终以PID 1运行。恶意软件可能会添加自己的任务让launchd启动,所以养成检查“登录项与扩展”的习惯很好。
launchctl list显示的是什么?
launchd已载入的每个任务,以及它正在运行时的PID、上次的退出状态和标签。标签通常包含公司和产品的名称,能帮你分辨是哪个App安装了该任务。
从LaunchAgents中移除项目安全吗?
只适用于你认识且不再使用的App,而且更好的办法是在“登录项与扩展”中关闭该项目,或使用App的卸载程序。永远不要从/System里的文件夹中移除任何东西。
相关条目
分步指南:Mac为什么无法睡眠。
想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。