Junki
Junki
Published on 2025-02-14 / 530 Visits
1
0

macOS Sequoia WebThumbnailExtension 进程高占用问题修复

现象

在 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

Comment