lsof 和 kill 命令完全指南:端口查询与进程管理速查手册

快速预览 :本文整理了 Unix/Linux 系统 lsofkill 命令的常用用法,帮助你快速定位端口占用、终止僵尸进程、监控网络连接。文末附 shell 函数封装,一键杀掉占用端口的进程。

关键词lsofkill端口占用进程管理Linux命令网络连接DevOps运维端口查询


为什么要学这两个命令?

日常开发和运维中,经常遇到这些问题:

  • ❌ 端口被占用,无法启动服务(Address already in use
  • ❌ 进程卡死,无法正常退出
  • ❌ 需要查看哪些程序正在连接网络
  • ❌ 找不到是哪个进程在操作某个文件

lsof(List Open Files)和 kill 正是解决这些问题的利器。


lsof - 列出打开的文件

lsof = Li st O pen Files - 在 Unix 中一切皆文件,包括网络连接

基本语法

bash 复制代码
lsof [options]

按端口查询:查看端口被哪个进程占用

命令 说明
lsof -i :4006 查看占用 4006 端口的进程
lsof -i :4006 -P 禁止端口名转换,直接显示数字
lsof -i TCP:4006 只看 TCP 端口
lsof -i UDP:53 只看 UDP 端口
lsof -i :80 -i :443 同时查看多个端口

按进程查询:查看特定进程打开的文件

命令 说明
lsof -p 15776 查看 PID 15776 打开的所有文件
lsof -p 1234 -p 5678 查看多个进程
lsof -c node 查看 node 命令打开的文件
lsof -u username 查看某用户打开的文件
lsof -u ^root 排除 root 用户的文件

按网络查询:监控网络连接状态

命令 说明
lsof -i 查看所有网络连接
lsof -i TCP 只看 TCP 连接
lsof -i UDP 只看 UDP
lsof -i 4 只看 IPv4
lsof -i 6 只看 IPv6
lsof -i @192.168.1.1 查看指定主机的连接
lsof -i @127.0.0.1:4006 查看 IP 和端口

按文件/目录查询

命令 说明
lsof +D /path/to/dir 递归查看目录下被打开的文件
lsof /var/log/syslog 查看谁在使用特定文件
lsof +L1 查找已删除但仍被打开的文件

其他常用选项

选项 说明
-t 只输出 PID,简化结果
-l 不转换用户 ID
-n 不解析主机名
-v 显示版本信息

lsof 输出字段含义

sql 复制代码
COMMAND     PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node      15776 ruofengwang   25u  IPv4 0x44179c2679b65508      0t0  TCP localhost:4006 (LISTEN)
字段 说明
COMMAND 打开该端口的命令名
PID 进程 ID
USER 运行该进程的用户
FD 文件描述符(25u = fd 25,可读写)
TYPE 文件类型(IPv4/IPv6/CHR 等)
NODE NAME 网络地址或文件路径


kill - 终止进程

基本用法:如何杀掉进程

bash 复制代码
kill [signal] PID

常用信号:SIGTERM vs SIGKILL

信号 命令 含义
SIGTERM kill PID / kill -15 PID 默认信号,优雅关闭,允许清理资源
SIGKILL kill -9 PID 强制立即终止,不保存数据
SIGHUP kill -1 PID 重新加载配置
SIGINT kill -2 PID 中断信号(同 Ctrl+C)

杀掉占用指定端口的进程(实用技巧)

bash 复制代码
# 方法一:获取 PID 后 kill
lsof -ti :4006 | xargs kill

# 方法二:强制杀掉
kill -9 $(lsof -ti :4006)

# 方法三:使用 fuser
fuser -k 4006/tcp

封装成 shell 函数(添加到 ~/.zshrc)

bash 复制代码
# 杀掉指定端口的进程
killport() {
    local port=$1
    local pid=$(lsof -ti :$port)
    if [ -n "$pid" ]; then
        kill -9 $pid
        echo "Killed process $pid on port $port"
    else
        echo "No process found on port $port"
    fi
}

# 使用
killport 4006

其他常用 kill 命令组合

bash 复制代码
# 杀掉所有 node 进程
killall node

# 杀掉某用户的所有进程
pkill -u username

# 按名称杀进程
pkill -f "process name"

# 列出所有信号
kill -l


实用技巧与常见场景

场景 1:查看并释放被占用的端口

bash 复制代码
# 查看
lsof -i :4006

# 杀掉
kill -9 $(lsof -ti :4006)

场景 2:查找已删除但未释放的文件(释放磁盘空间)

bash 复制代码
# 找出占用已删除文件的进程
lsof +L1

# 根据结果 kill 进程以释放磁盘空间

场景 3:设置快捷别名(提高效率)

bash 复制代码
alias port='lsof -i'
alias portkill='killport'

⚠️ 注意 :优先使用 kill(SIGTERM)让进程优雅退出,kill -9(SIGKILL)不会保存数据或清理资源。

相关推荐
玄芯散人1 天前
【筑基·059】Linux命令行入门:工程师的操作系统
linux·操作系统·命令行
Flynt2 天前
HN 382分热文里的终端小技巧,我实测了一遍,git pickaxe 最值
git·命令行
databook4 天前
如何使用 Bash 进行数据清洗
数据分析·命令行
阿钱真强道10 天前
03 嵌入式操作系统 | 常用命令Ⅰ:文件、查找与压缩
linux·ubuntu·文件管理·命令行·压缩解压
zzzzzz31013 天前
Claude Code:把 AI 放进终端,真正值得关注的是什么
人工智能·开源·命令行
捷瑞电子工坊15 天前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
Lyra_Infra23 天前
MySQL Docker 误删恢复:binlog PITR
mysql·docker·命令行
hello93071 个月前
homebrew常用操作
命令行
Ratman1 个月前
影刀RPA卸载残留篡改环境变量的排查
命令行
深海鱼在掘金1 个月前
深入浅出RAG——第7章:基础篇实战:文档问答机器人
人工智能·typescript·命令行