2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
Rust 编写的跨操作系统端口查找器 —— 一个命令行工具,三种截然不同的数据格式
一个小型的 Rust 命令行工具,在 macOS、Linux 和 Windows 上使用相同的标志和相同的输出结构来回答“谁占用了 3000 端口?”这个问题——并且可以选择终止该进程。二进制文件仅 488 KB,包含 42 个测试,除了
clap和serde之外没有依赖任何外部 crate。
当运行 npm run dev 时,程序因 EADDRINUSE: address already in use :::3000 错误而崩溃,再次出现一个僵尸 Node 进程占用端口的情况。在 macOS 上,常用的命令是 lsof -nP -iTCP:3000 -sTCP:LISTEN。在 Linux 上,使用的是 ss -Hlntp "( sport = :3000 )"——除非是 Alpine Linux,这种情况下 ss 可能不支持 -p 参数。在 Windows 上,则需要先运行 netstat -ano | findstr :3000,接着运行 tasklist /FI "PID eq ..." 以获取进程名称。
三个操作系统,三种完全不同的命令,三种不同的输出结构。如果你发布的软件需要在这三个系统上运行——这里的“发布”还包括“通过 SSH 连接到客户机器进行调试”——你最终不得不每隔几周就重新学习其中一种命令。
我想要一个单一的工具:
-
在每个操作系统上使用相同的命令。
port-finder 3000可在 macOS、Linux 和 Windows 上运行。 -
相同的输出结构。 固定的五列:
端口 / 进程ID / 命令 / 用户 / 地址。 -
不隐瞒双栈情况。 如果一个进程同时绑定了
0.0.0.0:3000和[::]:3000,这是两个套接字,而不是一个——显示两行记录。 -
一键终止。 使用
--kill(发送 SIGTERM 信号)或--force(发送 SIGKILL 信号),无需再输入第二个命令。 -
为脚本提供
--json输出。 我构建的任何工具都具备监控/自动化路径。 -
可通过
cargo install安装的静态二进制文件。 无 C 语言依赖,无 OpenSSL 依赖。
编写这个工具的过程比我预期的更有趣。每个操作系统暴露“谁正在监听此套接字”信息的方式确实截然不同——不仅仅是标志不同,而是数据格式不同。port-finder 内部的三个解析器几乎没有任何共同之处。
GitHub:https://github.com/sen-ltd/port-finder
表面用法
# 单个端口
$ port-finder 3000
# 多个端口
$ port-finder 3000 8080 5432
# 范围
$ port-finder 3000-3100
# 显示所有内容
$ port-finder
# 显示后终止进程
$ port-finder 3000 --kill # SIGTERM 信号
$ port-finder 3000 --force # SIGKILL 信号
# 用于管道处理
$ port-finder --json 8080 | jq '.listeners[] | {pid, command}'
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。
