要杀死一个进程,你会怎么做? 是: ```shell # 1. 找到 PID $ ps -ef | grep <进程名> # 2. 杀死进程 $ kill -9 <PID> ``` 还是: ```shell $ killall <进程名> ``` 或是: ```shell $ pkill <进程名> ``` 再或者用其他什么命令。 上面这些命令,有的通过 PID 杀死一个进程,有的通过进程名杀死一类进程,如果要搜索还得记着搜索命令是什么。 对于不常使用命令的人来说,可能根本记不住这么多命令,当然可能也没必要记住。 如果有哪个命令能集所有能力(查看/搜索/杀死进程)于一身,那该多好,这样只要学习一个命令就可以了。 正好`fkill`就具备这种能力。 ![](https://cdn.nlark.com/yuque/0/2022/jpeg/1243769/1661438939512-8d0642a9-d1ff-4f4d-ae81-acebe8147e53.jpeg) <a name="mGzZO"></a> # 简介 **Fkill **的全称是 **F**abulously **kill**,直译为**绝杀**,它用一种更简单和直接的方式杀死进程。 传统杀进程的方式最大的问题就是不直观,功能太分散,而`fkill` 可以交互式的选择、搜索和杀死进程,高亮显示关键信息。在功能上,支持通过 PID、进程名、应用名杀进程,支持同时杀死多个进程。当然,这还没完,`fkill` 除了支持杀死进程外,还支持关闭端口。 正是因为有这么多杀招, Fkill 才能称之为“绝杀”。 **基本信息** | **名称** | **Fkill** | | --- | --- | | **当前版本** | 7.1.0 | | **开发语言** | JavaScript(100%) | | **适用平台** | macOS、Linux、Windows | | **开源地址** | [https://github.com/sindresorhus/fkill-cli](https://github.com/sindresorhus/fkill-cli) | | **当前星标** | 6.6k | **功能特性** - 可以交互式搜索、筛选进程,然后回车杀死进程; - 可以通过 PID、进程名、应用名直接杀死进程; - 可以通过端口号关闭端口; - 可以同时关闭端口、杀死进程、终止程序; - macOS 上还能显示进程的内存和CPU使用率。 这些功能特性下面都会演示,不过,在使用前得先准备好环境。 <a name="hHLS8"></a> # 环境准备 Fkill 是用 Node.js 开发的,因此各个平台上的安装方式比较统一,只需使用 npm 全局安装就可以了。 **安装命令:** ```shell npm install --global fkill-cli ``` 安装完成后就可以使用了。 **查看帮助:** ```shell $ fkill --help Fabulously kill processes. Cross-platform. 用法 $ fkill [<pid|name|:port> …] 选项 --force -f 强制 kill --verbose -v 显示过程参数 --silent -s 静默 kill --force-after-timeout <N>, -t <N> 强制终止 N 秒后未退出的进程 示例 $ fkill 1337 $ fkill safari $ fkill :8080 $ fkill 1337 safari :8080 $ fkill ``` <a name="X0VkQ"></a> # 快速开始 接下来我们快速走一遍 `fkill` 的操作流程,以便建立起一些基本的概念。 **STEP 1. 直接运行 **`**fkill**`** 命令会进入交互模式** 在交互模式下可以查看所有进程信息、选择/筛选进程、回车杀死进程。 **在 CentOS 上的效果,如下图所示:**<br /> ![image.png](https://img-blog.csdnimg.cn/img_convert/676062f26394e8cf1e65d53b995e303d.png) <br />**Running processes** 下面是所有进程的列表,当前选中的进程被高亮显示,一行的信息从左到右分别是:应用名、PID 和端口号(在终端最右)。移动光标可上下选择,键入关键字可过滤进程。 **在 macOS 上的效果,如下图所示:** ```shell $ fkill ? Running processes: (Use arrow keys or type to search) ❯ /Applications/Go 87912 🚦13.2% 🐏1.3% com.docker.hyper 85466 🚦5% 🐏2.3% /Applications/iT 692 🚦5.4% /Applications/� / 50819 🐏3.4% /Applications/Go 1128 🐏1.3% /Applications/Go 697 🐏1.6% /Applications/� / 50814 🐏1.3% /Applications/� / 50815 🐏1.5% /Applications/Go 1242 🐏1.3% /Applications/Go 68930 🐏1.3% (Move up and down to reveal more choices) ``` 如上所示,正在运行的进程都被列出来了,在此交互模式下,**🚦n%** 表示 CPU 使用率高,**🐏 n% **表示内存使用率高。 > 注意:这个界面适配的不是很好,进程名都没有显示全,中文还有乱码,希望作者尽快修复吧。 **STEP 2. 通过光杆上下移动选择某个进程** 回车后选中的进程被终止,所下所示: ```shell $ fkill ? Running processes: com.docker.hyper 94274 🐏2.3% ``` **STEP 3. 输入进程名会过滤进程(进程名不区分大小写)** ```shell $ fkill ? Running processes: hy # 输入了 hy,就会过滤带 hy 关键字的进程 ❯ com.docker.hyper 95063 🚦3.4% 🐏2.3% /Applications/Hy 84572 :59055 ``` 最左边的`>` 表示选中行,被选中的行也会高亮显示,通过光标可上下移动选择行,回车后就会杀死当前选中的进程。 **STEP 4. 按下 control + c/Ctrl + C 退出交互模式** 以上就是 `fkill` 命令基本的使用方式。 <a name="BxvO8"></a> # 使用指南 <a name="oABcd"></a> ## 1. 如何通过进程 ID 杀死进程? `fkill` 支持杀死一个或同时杀死多个进程。 命令格式: ```shell # 杀死一个进程 $ fkill <PID> # 杀死多个进程 $ fkill <PID> <PID> <PID> ``` <a name="1HvTp"></a> ## 2. 如何关闭端口? 如果使用 `fkill` 关闭端口,需要在端口号前面加上冒号。 命令格式: ```shell $ fkill :端口号 ``` 如,关闭 8080 端口: ```shell # 关闭一个端口 $ fkill :8080 # 关闭多个端口 $ fkill :8080 :6060 ``` <a name="SYpF8"></a> ## 3. 如何终止应用程序? `fkill` 也可以直接终止一个应用程序。 命令格式: ```shell $ fkill 应用程序名 ``` 如,关闭 firefox: ```shell # 关闭一个应用 $ fkill firefox # 关闭多个应用 $ fkill firefox safari ``` <a name="Tlpg3"></a> ## 4. 如何同时杀死进程、关闭端口、终止应用程序? `fkill` 不仅可以分别杀死进程、关闭端口、终止应用程序,也可以同时做这些。 如,同时杀死进程、关闭端口、终止应用程序: ```shell # 例1 $ fkill 24832 firefox :8080 # 例2 $ fkill 24832 24831 firefox safari :8080 :6060 ``` 如果指定的进程不存在,则出现一个提示:是否强制执行? ```shell $ fkill 24832 24831 firefox safari :8080 :6060 ? Error killing process. Would you like to use the force? (Y/n) ``` 输入 n 会终止执行,输入 Y 会强制执行,但会有报错,如: ```shell AggregateError: Error: Killing process 24832 failed: Process doesn't exist at Array.map (<anonymous>) at fkill (file:///usr/local/lib/node_modules/fkill-cli/node_modules/fkill/index.js:149:9) ``` 如果不想看到报错信息,则加上` -s `静默执行就可以了。 如: ```shell $ fkill -fs 24832 24831 firefox safari :8080 :6060 ``` <a name="BXgqA"></a> ## 5. 如何搭配 procs 一起使用? 查看进程信息用 `procs` 命令更加专业,毕竟术业有专攻,用 procs 看,用 fkill 杀,这样搭配使用更好。 比如,先查看 firefox 的进程信息,拿到 PID: ```shell # 先查看进程信息 $ procs firefox PID:▲ User │ TTY CPU MEM CPU Time │ Command │ [%] [%] │ 36131 bxp │ 0.0 1.1 00:00:18 │ /Applications/Firefox.app/Contents/MacOS/firefox ``` 再强制终止进程: ```shell # 加上 -f 就是强制终止了 $ fkill -f 36131 ``` <a name="LcGwv"></a> # 总结 一图胜千言: ![](https://cdn.nlark.com/yuque/0/2022/jpeg/1243769/1661079679360-0af15dca-07a3-48f3-ae4b-73eca6db904c.jpeg) `fkill` 以非常直观和人性化的操作方式提供绝杀能力,可以便捷的杀进程、关端口、杀应用,还可以同时做这些,一键操作,方便至极。 <a name="Hi26V"></a>