# 如何在 macOS 上批量退出软件或进程

> 本文公开全文。

原文：https://utgd.net/article/20152

稍微老道一些的 Windows 用户，遇上任何卡死的程序，都会自信地微微一笑，按下 CTRL\-ALT\-DEL 快捷键召唤出任务管理器，将卡住的程序强制退出。这套可靠的退出机制，可算是给用户吃了一颗定心丸。

类似的退出方式在 macOS 常年缺席。尽管同样老道的 macOS 用户也可以微微一笑，打开活动监视器（Activity Monitor），但一方面这玩意儿没有快捷键（尽管你可以自己设置），另一方面，作为一个图形化的独立软件，系统卡死的时候能不能打开它都是一个问题。

好在 macOS 拥有一个不错的命令行环境和自动化生态，我们可以制作一个“进程管理器”，精确杀死或者批量退出任何卡死的应用。

- Automator 动作下载

- LaunchBar 动作下载

- Alfred 版动作下载

- Keyboard Maestro 动作下载

## 常规的退出方式

命令行和自动化终归是兜底方案，在 Dock 栏上看得见摸得着的、尚未彻底“卡死”的应用，通过 macOS 自带退出方式也可以治好。不过，强制退出到底算是“剖腹产”，多少有一些风险，在使用任何一种强推退出手段之前都建议检查一下文件保存设置，在“System\-General”中确保没有勾选“Close windows when quitting an app”选项，以免强制退出后丢失文件修改记录。

第一种常规强制退出方式可以在 Dock 栏中使用。所有在 Dock 栏中显示的应用（需正在运行，没有运行的自然没有退出一说），无论是原生还是第三方，都可以在按住 ‌⌥Option 的同时右键击之，即可看见“Force Quit”选项，点击后通常就能让应用完全退出。Finder 少有不同，不能完全退场，只能重启“Relaunch”。但凡一个 应用还有 Dock 图标，这种方法一般还能奏效。

第二种常规退出手段同样面向当前 Dock 上运行中的应用。使用快捷键 ‌⌥Option\-⌘Command\-⎋Esc 或者在顶部菜单栏\-苹果菜单中点击“Force Quit”，可以呼出一个类似 Windows 任务管理器的小窗口，其中呈现的就是 Dock 中的应用。在全屏工作时，使用 Dock 可能有些不便，也可以选择通过这一方法退出应用。

以上两种方法都只能处理 Dock 中的应用，显然，相当一部分应用根本没有 Dock 图标，例如菜单栏管理器 Bartender、文件自动化整理工具 Hazel、键盘自动化工具 Keyboard Maestro……这些应用（通常是第三方应用）可以在活动监视（Activity Monitor）中控制。选中任意应用，再点击活动监视器顶部工具栏中的“✘”形状按钮即可将其退出。

以上三种退出方式，基本能够满足“退出应用”这个需求，但和 Windows 上那种釜底抽薪的招式还是差了一口气。比如 Safari 和 Chrome 被标签页撑死的时候，可能连“右键点击”这一操作本身都会卡住；整个桌面都不幸黑屏的状况下，活动监视器也是泥菩萨过河，很难指望它去解救其他应用。

## 兜底的退出命令：killall

即便是不熟悉 macOS 下的命令行的读者，估计也在各种渠道——尤其是装神弄鬼的公众号——看到过下面这条命令：

```
killall Finder
```

这条命令简直是万金油，不仅电脑卡死时可以救急，对 Finder、Preview、LaunchPad 等等系统应用做过任何配置改动后，也几乎都可以像吃板蓝根一样，有备无患地来上一剂。仔细一想，输入这条命令时，电脑到底做了什么？

killall 是 Linux 系统中的一条命令，用于“杀死”进程（processes），在 macOS 的环境中，很多时候大约等同于退出一个应用。例如 killall Finder，语法上讲它“杀”了 Finder 进程，但我们感受到的实际效果就是强制退出并重启（relaunch）了 Finder。同样，这条命令也可以用于退出其他几乎任何应用，不管它正在运行、隐藏于 Dock 栏、位于菜单栏还是完全处于后台。比如一些窗口管理工具，卡住动弹不得时往往在强制退出界面也看不到其踪影，此时也可以用 killall 命令将其退出。

但 killall 毕竟更像古代流传下来的魔法咒语，你得先知道要退出的进程叫什么、正确拼出它的名字，才能让咒语对其生效。从这个角度看，也难怪《真名实姓》将赛博世界描绘成了中土魔法世界。在 macOS 的自动化生态中，我们有远比古早命令行更方便的交互方式，可以做一个类似任务管理器的列表界面，更直观也更现代。

> 在很久很久以前的魔法时代，任何一位谨慎的巫师都把自己的真名实姓看作最值得珍视的密藏，同时也是对自己生命的最大威胁。因为——故事里都这么说——一旦巫师的对头掌握他的真名实姓，随便用哪种尽人皆知的普通魔法都能杀死他……

知道一个进程的名字，就可以用 killall 杀死它。我仿照任务管理器和 Force Quit 的界面，制作了一个当前进程列表——“进程管理器”，可以强制退出其中任意进程。和在 Finder 中选取文件类似，你可以在“进程管理器”中按住 ‌⌘Command 键选中多个进程，将其批量退出；此外，习惯全键盘操作的高手也可以通过按键快速定位任意进程，例如按下 do 一般就能找到“Dock”（只要没有其他和它名字前两个字母相同的进程），按下 air 则是“Airdrop”。

这个“进程管理器”由 AppleScript 编写而成，其退出功能则由于 killall 完成。你可以把它嵌入任何支持 AppleScript 的自动化工具，除了文章开头提供的 Automator，还包括 Keyboard Maestro、LaunchBar、Alfred 等选择。如果想和系统功能保持整齐，可以仿照 Force Quit 的启动方式，设置 ‌⌃Control\-⌥Option\-⌘Command\-⎋Esc 为“进程管理器”的快捷键。

“进程管理器”会列出所有当前进程，而不仅仅是单个应用，如果不熟悉某些名称所指代的对象，最好不要随意将其退出。虽说一般情况下将应用和进程混为一谈也无妨，但有时候也需要区分“进程”和“应用”，举一个简单的例子，几乎所有的自动化工具都有编辑界面和运行界面，比如 Keyboard Maestro、Hazel 和 Automator，每个应用往往拥有两个以上的进程，有的可能还独立于主应用之外（比如 Hazel 的帮手程序 HazelHelpr），这时候囫囵吞枣使用 killall 可能就会错杀。

一般而言，我会用“进程管理器”结束并重启一些系统进程，比如 Dock、QuickLook、AirDrop 和 bird，这几条进程卡顿或工作异常时可以试着杀掉并重启，往往能获得“重启解决一切”的效果。另外，自动化工具——尤其是其中的子进程——卡死后往往无法通过正常方式退出，也很难在 Force Quit 列表中找到它们，此时同样可以通过“进程管理器”将其退出。

## 小结

退出应用，本身是一件不大不小的事，macOS 提供的一些原生方法也能够满足多数需求。但和 Windows 用户之间，似乎总差了一点信心。即便是活动监视器，至少在感官上仍然是“另一个应用”，有种找隔壁班同学来助阵的感觉，底气没那么足——它本身也会卡死啊；而 Windows 的任务管理器和锁屏、切换用户、注销、更换密码等功能并列，让人心里有底——事实上它也确实比 macOS 的同类功能更强，不仅应用和进程，甚至可以退出用户（Users）。

至少在退出应用和进程方面，我们希望有一款类似 Windows 任务管理器这样的兜底工具，既不用和卡死的应用纠缠不清，也无需不分青红皂白关机重启。对电脑有了更多的掌控，就能带给使用者更多的自信。

---

[前往标准阅读页](https://utgd.net/article/20152?audience=web)
