查看端口 :`lsof -i:8080`

查看端口 :lsof -i:8080
lsof = List Open Files(列出已打开的文件)。 在 Unix/macOS 里,"一切皆文件"——网络连接(socket)、管道、设备、普通文件,全都算"打开的文件"。所以 lsof 不只是看文件,也能看网络。

-i = 只看跟网络(Internet)相关的"文件",也就是 socket。

:8080 = 过滤条件,只看端口号是 8080 的。

合起来就是:"列出所有跟 8080 端口有关的网络连接,以及背后是哪个进程在用"。

image.png

lsof -ti :8080 — 同上,但只输出 PID
多了一个 -t: -t = terse模式(简洁模式),只输出 PID,别的列全部不打印。

这样输出就变成纯数字,比如: 79739
这种"纯数字输出"特别方便接到下一个命令,所以才有了下面的组合用法。
lsof -ti :8080 | xargs kill -9 一条命令直接杀掉

这是三段组合,我拆开讲:
管道 |
| 叫管道(pipe)。意思是:把前一个命令的输出,作为后一个命令的输入。

举例:
lsof -ti :8080 输出 79739
| xargs kill -9 把 79739 喂给后面的命令

xargs = extended argsuments。

为什么需要它?因为 kill 命令只接受参数(参数 = 写在命令后面的东西,比如 kill 79739 里的 79739),它不接受标准输入。直接写 lsof -ti :8080 | kill -9 是不行的,kill 不会读管道里的内容。

xargs 的作用就是:把管道里来的内容,转换成下一个命令的参数。

所以 xargs kill -9 实际上等价于:
kill -9 79739

kill -9 kill = 给进程发信号。它的名字虽然叫 "kill",但本质是"发信号",不一定是杀。
kill 79739(不带 -9)→ 默认发 SIGTERM(信号 15),意思是"请你优雅地退出"。进程可以接到这个信号后清理资源(关闭数据库连接、刷盘、释放端口),然后自己退出。推荐先试这个。
kill -9 79739 → 发 SIGKILL(信号 9),意思是"立刻死,没得商量"。进程没办法捕获或忽略这个信号,操作系统直接把它干掉。代价是它来不及做清理工作。

类比:
kill(SIGTERM)= 跟同事说"你下班了,把东西收拾收拾走"。
kill -9(SIGKILL)= 保安直接把人拖走。
实际经验:JVM/Spring Boot 一般用 kill(SIGTERM)就能停下来。如果 5–10 秒还没退,再上 kill -9

image.png
image.png
image.png
image.png

为什么要这么设计?
因为 -i 这个参数要表达的信息有好几个维度(IP 版本、协议、主机、端口),不能光靠空格分开(空格在 shell 里有特殊含义,会被当成多个参数)。所以 lsof 借鉴了 URL 的写法:

image.png

这跟你写 URL 的 http://localhost:8080 是一个思路——冒号永远引导端口。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容