要杀死一个进程,你会怎么做?
是:
```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>