现象
在 macOS Sequoia 15 版本中,经常遇到突然卡顿现象,查看活动监视器发现,有一个或多个 WebThumbnailExtension 进程,每个进程大概占用 400M 左右内存,且 CPU 占用较高。
原因
原因其实是 Excel 文件的图标预览图生成失败导致的。
在 macOS 系统中,Excel 文档文件会生成一个预览其内容的图标。
但是针对部分异常的 Excel 文件,例如有一些 Windows 系统创建的 Excel 文件,或者损坏的 Excel 文件,在生成预览图标时会失败,此时 WebThumbnailExtension 进程并不会自动关闭,并且会重复启动,极大的占用了系统资源。
解决
可以通过编写后台脚本的方式,实现对 WebThumbnailExtension 进程的自动回收。
编写脚本
kill_web_thumbnail_extension.sh
脚本内容如下:
#!/bin/bash
# 定义目标进程的模式
TARGET_PROCESS="/System/Library/ExtensionKit/Extensions/WebThumbnailExtension.appex/Contents/MacOS/WebThumbnailExtension"
# 持续监听目标进程
while true; do
# 搜索进程并提取它们的进程 ID(PID)
PIDS=$(ps -axo pid,command | grep -i "$TARGET_PROCESS" | grep -v grep | awk '{print $1}')
# 检查是否找到了任何进程 ID
if [ -n "$PIDS" ]; then
OUTPUT="$PIDS 进程已终止。"
# 终止进程
kill $PIDS
# 将输出打印到控制台
echo -e "$OUTPUT"
# 使用 osascript 显示系统通知
osascript -e "display notification \"$OUTPUT\" with title \"WebThumbnailExtension 进程清理\""
fi
# 每隔一段时间检查一次
sleep 1
done
其中 osascript -e "display notification \"$OUTPUT\" with title \"WebThumbnailExtension 进程清理\""
这行代码的作用是发送一个系统通知,如不需要可以删除。
如果需要系统通知,首次使用可能需要在 系统设置 -> 通知 -> 脚本编辑器
中开启通知权限。
如果没有找到 脚本编辑器
,可在应用中找到它启动一次。并创建一个脚本,输入 display notification "内容" with title "标题"
测试一下。
后台运行脚本
创建脚本后赋于执行权限:
chmod 777 kill_web_thumbnail_extension.sh
可使用 nohup 后台运行脚本。
nohup sh kill_web_thumbnail_extension.sh &
停止运行脚本
可查询脚本进程并终止运行:
kill $(ps -ef | grep "kill_web_thumbnail_extension.sh" | grep -v grep | awk '{print $2}') 2>/dev/null