术语表/你会看到的进程

secd

又称:钥匙串和密码

简要回答

secd是管理你用户账户中钥匙串项目的macOS进程:存放在iCloud钥匙串或“本地项目”中的密码、通行密钥、密钥和证书。每个存储或自动填充密码的App都会向secd索取,打开iCloud钥匙串时,secd还会让这些项目与你的其他设备保持同步。

secd以你自己的账户运行,所以活动监视器的“用户”列显示的是你的用户名。它与securityd并肩工作,securityd是一个以root运行的旧进程,负责Mac从早期版本起就在使用的基于文件的钥匙串,即“登录”和“系统”钥匙串。secd则负责较新的钥匙串,iCloud钥匙串、通行密钥和受触控ID保护的项目都依赖它。“密码”App会显示你存储的密码和通行密钥,“钥匙串访问”则会列出两种钥匙串。

大部分时间secd处于闲置状态。只有真正有工作时它才会忙起来:新Mac上或打开iCloud钥匙串后的首次同步、更改Apple账户密码后设备重新连接、大量导入密码,或者某个App一遍又一遍地请求同一个项目。最后一种通常就是它一直排在CPU列表前面的原因。

secd为什么占用这么多CPU

最常见的原因是同步。Mac加入iCloud钥匙串时,secd会下载、解密并合并你其他设备上的每一个项目;每当大量项目同时变化,它都要再做一遍。钥匙串里有成千上万个密码、密钥和证书时耗时更长,而且在设备之间互相追赶进度时,这项工作可能一波接一波地出现。

峰值一直不结束,通常说明陷入了循环。某个App向secd请求一个项目,得到错误或拒绝后再次请求,每秒好多次。密码管理器、浏览器、VPN客户端和存储登录令牌的开发者工具是常见的嫌疑对象,往往就在App更新之后。

怎么处理

在换新Mac、重新登录或更改密码之后,让Mac保持唤醒,等同步完成。它会自行结束。如果是循环,就逐个退出App,从存储密码或令牌的App开始,同时在活动监视器中观察secd。如果退出某个App后它降了下来,就更新那个App,或者退出登录后重新登录。

如果找不到是哪个App,就打开“系统设置”→你的名字→“iCloud”→“密码”,关闭“同步此Mac”,重新启动,再重新打开。你的密码仍保存在iCloud和你的其他设备上。在活动监视器中退出secd只能管一时:macOS会立刻重新启动它。

如何查看secd在做什么

正常工作的同步会逐渐安静下来,而循环每隔几分钟看起来都一样。活动监视器和“终端”可以告诉你是哪一种。

  1. 打开活动监视器,点按“CPU”标签页,选取“显示”→“所有进程”,然后在搜索栏中输入sec。你会看到secd列在你自己的用户名下,securityd列在root下。
  2. 观察secd的“% CPU”几分钟。数值逐渐降到零,说明同步正在收尾。数值一直不降,或者有规律地起伏,就是循环。
  3. 点按“网络”标签页,在搜索栏中输入cloudd。cloudd负责传输iCloud的同步流量。如果secd很忙,同时cloudd在收发数据,钥匙串多半正在同步。如果secd很忙而cloudd很安静,就去你的Mac上找某个App。
  4. 要看细节,打开“终端”并运行log stream --predicate 'process == "secd"'。反复出现同一个App或项目的行,指向的就是要检查的App。按下Control-C停止。

secd的正常占用与异常情况

正常:secd平时接近零,在App存储或自动填充密码时短暂活跃一下。在新Mac上、打开iCloud钥匙串后,以及更改Apple账户密码后,它会工作更长时间。

值得检查:你什么都没做,它却连续几小时很忙,风扇转起来,或者App自动填充密码很慢。常见原因有:

  • 新Mac或恢复后的Mac首次进行iCloud钥匙串同步,钥匙串很大时可能要花一段时间。
  • 大量导入,例如把其他密码管理器或浏览器中的密码导入“密码”App。
  • 某个App循环请求同一个钥匙串项目,常见于更新后的密码管理器、浏览器、VPN客户端或开发者工具。
  • 多年累积的旧项目,例如已不再使用的App留下的证书和密钥,会让每次搜索和同步都变长。

钥匙串存放在哪里

两种钥匙串都在你的用户“资源库”中,位于~/Library/Keychains。登录钥匙串是文件login.keychain-db,secd管理的钥匙串则在那里一个以长ID命名的文件夹中。

不要为了解决CPU问题而删除或移动这些文件。只存在于这台Mac上的项目,例如不同步密码的App所存储的密码,会因此丢失。要查找和移除旧项目,请使用“钥匙串访问”(可以在“聚焦”中搜索打开)和“密码”App。

常见问题

Mac上的secd是什么?

它是管理你用户账户中钥匙串项目(例如密码和通行密钥)并让它们与iCloud钥匙串同步的macOS进程。每个存储或自动填充密码的App都要经过它。

secd为什么CPU占用高?

如果只是一会儿,那是因为换新Mac、重新登录或更改密码后iCloud钥匙串在同步。如果持续几个小时,那是因为某个App不停地向它请求同一个项目。逐个退出存储密码或令牌的App,就能找出是哪一个。

secd和securityd有什么区别?

两者都是macOS钥匙串的一部分。securityd以root运行,负责旧的基于文件的钥匙串,即“登录”和“系统”钥匙串。secd以你的身份运行,负责iCloud钥匙串和通行密钥所用的钥匙串。

secd是病毒吗?

不是。它是macOS的一部分,位于/usr/libexec/secd,处在磁盘上只有Apple更新才能更改的密封区域中,并由launchd以你自己的账户启动。每台Mac都在运行它。

为什么Mac总是要我输入钥匙串密码?

通常是因为登录钥匙串的密码与Mac的登录密码不再一致,多半发生在登录密码被重设之后。这个钥匙串属于securityd,而不是secd。Apple的解决办法是在“钥匙串访问”→“设置”中选择“复位默认钥匙串”,但这会删除存储在登录钥匙串中的密码,所以Apple建议只在Apple支持人员建议时才这样做。

相关条目

想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。