contactsd
又称:通讯录同步
简要回答
contactsd是管理你联系人的macOS进程。它维护Mac上的通讯录数据库,回应每一个查找姓名、号码或地址的App,并与“互联网账户”中的账户配合,让联系人与iCloud、Google、Exchange和其他服务器保持同步。
读取你通讯录的不只是“通讯录”App。“邮件”用它为发件人显示姓名,“信息”和FaceTime通话用它显示来电者,“日历”用它填写受邀人,“聚焦”用它查找联系人。这些都要询问contactsd,所以无论“通讯录”App是否打开,它都在运行。
大部分时间它处于闲置状态,几乎不占用资源。只有真正有工作时它才会忙起来:添加账户后的首次同步、大量导入、迁移数据库的macOS更新,或者某个账户不断失败又重试。最后一种通常就是它连续几小时排在CPU列表前面的原因。
contactsd为什么占用这么多CPU
在你添加账户、导入vCard文件或更新macOS之后,短暂的峰值是正常的,会自行结束。contactsd正在读取、合并和索引每一张名片,通讯录很大时要花一段时间。
峰值一直不结束,通常说明某个账户陷入了循环。contactsd向服务器请求更改,得到一个无法处理的回复,于是再次请求。Google和Exchange账户比iCloud更常出现这种情况,通常发生在更改密码、登录授权被撤销,或者服务器拒绝某个群组或名片之后。成千上万张重复名片(常常是因为同一个账户被添加了两次)也会以同样的方式让它一直很忙。
如何让它平静下来
先找出是哪个账户。打开“系统设置”→“互联网账户”,找一找要求你重新登录的账户,然后打开“通讯录”,检查边栏中的账户是否有警告。如果是某一个账户的问题,就为它关闭“通讯录”,等一分钟再打开。contactsd会丢弃该账户的本地副本并重新下载。
如果看不出是哪个账户,就为除iCloud以外的所有账户关闭“通讯录”,看看contactsd是否平静下来,然后逐个把其他账户加回来。在活动监视器中退出contactsd只能管一时:macOS会立刻重新启动它,同一个账户很快又会让它忙起来。
如何判断contactsd是否卡住了
正常工作的同步会逐渐安静下来,陷入循环的同步每隔几分钟看起来都一样。活动监视器和“终端”可以告诉你是哪一种。
- 打开活动监视器,点按“CPU”标签页,然后在搜索栏中输入
contacts。你会看到contactsd,常常还有AddressBookSourceSync,也就是与每个账户的服务器通信的帮助程序。 - 观察“% CPU”几分钟。数值逐渐降到零,说明同步正在收尾。数值一直不降,或者有规律地起伏,就是循环。
- 点按“网络”标签页。循环通常表现为AddressBookSourceSync一遍又一遍地收发少量数据,而不是一次大量下载。
- 要看细节,打开“终端”并运行
log stream --predicate 'process == "contactsd"'。反复提到同一个账户或服务器的错误,指向的就是需要修复的账户。按下Control-C停止。
contactsd的正常占用与异常情况
正常:contactsd平时接近零,在“邮件”或“信息”查找姓名时短暂活跃一下,添加账户或导入名片后会工作几分钟。macOS更新后,它把数据库迁移到新格式时,可能会忙得更久。
值得检查:它连续几小时都很忙,你什么都没做风扇却转起来,或者“通讯录”里同一个人出现了两三次。常见原因有:
- 某个账户需要你重新登录,原因是更改了密码或App专用密码被撤销。
- 同一个Google或Exchange账户被添加了两次,一次在“互联网账户”中,一次通过某个App。
- 旧导入留下的成千上万张重复名片。在“通讯录”中,选取“名片”→“查找重复项”来合并它们。
- 工作账户的服务器限制了同步频率,每次尝试都被拒绝后又重试。
contactsd把你的联系人存放在哪里
数据库位于你的用户“资源库”中,在~/Library/Application Support/AddressBook里,Sources下每个账户一个文件夹。不要为了解决同步问题而手动删除或编辑它:在“互联网账户”中为该账户关闭再打开“通讯录”,就能安全地重建该账户的副本,而只存在于你Mac上的联系人不会受影响。
在做任何较大的改动之前,先在“通讯录”中选取“文件”→“导出”→“通讯录归档”导出备份。它会把所有账户的每张名片存到一个文件中,以后可以再导入。
常见问题
Mac上的contactsd是什么?
它是管理你联系人的macOS进程:维护通讯录数据库,回应查找联系人的App,并让联系人与iCloud、Google、Exchange和其他账户保持同步。
contactsd为什么CPU占用高?
如果只是一会儿,那是因为添加账户、导入或macOS更新后它在同步或索引。如果持续几个小时,那是因为某个账户不断失败又重试,或者通讯录里全是重复项。
contactsd是病毒吗?
不是。它是macOS的一部分,由launchd以你自己的用户账户启动。你无法移除它,也没有理由移除。
AddressBookSourceSync是什么?
它是contactsd用来把每个通讯录账户与其服务器同步的帮助程序。如果它和contactsd一起忙,说明你的某个账户正在同步;两者之间的循环通常指向某一个账户。
为某个账户关闭“通讯录”会删除我的联系人吗?
它会从你的Mac上移除该账户的副本,而不会从服务器上移除。重新打开后,联系人会再次下载。只存储在“我的Mac上”的联系人不受影响。
相关条目
想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。