applescript 无法直接检测“无响应”状态,但可通过调用 ps/pgrep 和 kill -0 探测进程可通信性,仅在探测失败时执行 kill -9 强制终止,结合 try/on error 保障安全,并支持快捷指令、终端或 automator 部署。

AppleScript 本身不能直接检测“无响应”(Not Responding)状态,但可以结合 macOS 系统命令(如 ps、pgrep)和 AppleScript 的进程管理能力,实现主动识别并强制关闭疑似卡死的应用。关键在于:不依赖 GUI 响应判断,而是通过系统级进程信息+应用活跃性逻辑来触发关闭。
以下是一个实用、安全、可直接运行的 AppleScript 脚本方案:
1. 检测并关闭无响应应用的核心逻辑
macOS 中,“无响应”在 Activity Monitor 里本质是进程处于 not responding 状态,但 AppleScript 无法直接读取该字段。可行替代路径是:
- 使用
ps或pgrep查看进程是否仍在运行; - 结合
kill -0测试进程是否可通信(不终止,只探测); - 对长时间未响应的前台应用(如窗口冻结但进程存活),用
kill -9强制终止。
脚本示例(关闭指定名称的应用,若进程存在且疑似卡死):
set appName to "Safari" -- 替换为你想监控的应用名
try
-- 步骤1:检查进程是否存在且非僵尸
set pidList to do shell script "pgrep -f '^" & appName & "$' | head -n 1"
if pidList is "" then
display notification "✅ " & appName & " 未运行" with title "应用状态检查"
return
end if
-- 步骤2:尝试向进程发送空信号(探测是否可响应)
do shell script "kill -0 " & pidList & " 2>/dev/null"
-- 若 kill -0 成功,说明进程仍可通信 → 不强制关
display notification "⚠️ " & appName & " 进程正常,跳过关闭" with title "状态确认"
on error
-- kill -0 失败 → 进程可能僵死,执行强制终止
try
do shell script "kill -9 " & pidList
display notification "❌ 已强制关闭 " & appName & "(进程疑似无响应)" with title "强制终止"
on error errMsg
display alert "操作失败" message "无法终止 " & appName & ":" & errMsg
end try
end try
✅ 说明:
Apple Silicon Ai下载Apple Silicon AI — 在 Mac Studio、Mac Mini、MacBook Pro 和 Mac Pro 上运行大语言模型(LLM)、图像生成、语音转文字及嵌入(embeddings)。将您的 Apple Silicon 设备…
pgrep -f精准匹配完整进程名(避免误杀子进程);kill -0是零信号探测,不终止进程,仅验证其是否可接收信号;- 仅当探测失败时才执行
kill -9,避免误关正常运行的应用;- 所有操作带
try/on error,防止脚本因权限或不存在进程中断。
2. 自动化部署方式(任选其一)
快捷指令定时触发
在“快捷指令”中创建「个人自动化」→ 触发条件设为“特定时间”或“到达地点”,添加“运行 AppleScript”操作,粘贴上述脚本(替换appName即可)。-
终端命令一键执行
将脚本保存为force-quit.scpt,然后终端中运行:osascript ~/Documents/force-quit.scpt
集成到 Automator 工作流程
新建 Automator 应用程序 → 添加“运行 AppleScript”操作 → 粘贴脚本 → 保存为.app,双击即可执行,适合桌面快捷启动。
3. 安全与权限注意事项
首次运行
kill类命令时,系统会弹出「允许辅助功能」提示 → 进入「系统设置 > 隐私与安全性 > 辅助功能」,勾选对应脚本或 Automator 应用;-
kill -9是最后手段,建议先尝试kill -15(优雅退出):do shell script "kill -15 " & pidList & " 2>/dev/null; sleep 2; kill -0 " & pidList & " 2>/dev/null || kill -9 " & pidList
(先发终止信号,等待2秒,再探测;若仍不可响应,再强杀)
不建议对
WindowServer、kernel_task、launchd等系统核心进程使用该逻辑。
不复杂但容易忽略:真正的“无响应”判定需跨层协作——AppleScript 负责调度与交互,shell 命令负责底层探测,两者配合才能既可靠又安全。











