Linux结束特定端口进程的4种方法
作者:admin 时间:2026-3-24 6:42:29 浏览:你是不是遇到过当要运行某程序时出现“端口被占用”的情形?必须停止正在运行(或无响应)的进程,以释放已占用的端口,才能运行需要用到该端口的程序。有很多方法可以找到并结束在某个端口上运行的进程,本文将介绍4种你可以用到的方法。

方法1:使用Killport工具
Killport是一个很棒的CLI工具,可以只使用端口号杀死在特定端口上运行的进程,而不需要服务名称或进程ID。唯一的不便是它是一个外部工具,但你可以按照我们的安装指南在Linux系统上快速安装它。
一旦你安装了它,你就可以快速终止在某个端口上运行的进程。让我们假设你有一个Apache服务器在端口80上运行。要停止它,只需执行以下命令:
$ sudo killport 80
输出:

笔记
请忽略最后一条“No such process”消息,它只是对发送给进程的最后一个kill信号的响应。关键点是端口现在可供任何其他进程使用。
方法2:使用fuser
fuser是另一个很好的工具,用于识别使用特定文件、文件系统或套接字的进程。尽管使用它来识别在特定套接字(或端口)上运行的进程,但你可以使用它来解决与文件锁定、进程管理和系统资源相关的问题。
它预装在一些流行的Linux发行版上,如Ubuntu、Fedora和Manjaro,但如果你的系统上没有它,你可以安装包含“fuser”和其他命令行实用程序的“psmisc”包。
# On Debian, Ubuntu, Kali Linux, Linux Mint, Zorin OS, Pop!_OS, etc.
$ sudo apt install psmisc
# On Red Hat, Fedora, CentOS, Rocky Linux, AlmaLinux, etc.
$ sudo dnf install psmisc
# On Arch Linux, Manjaro, BlackArch, Garuda, etc.
$ sudo pacman -S psmisc
# On OpenSUSE system
$ sudo zypper install psmisc
要找出在特定端口上运行的进程,你可以在“fuser”命令中指定端口号及其TCP或UDP协议。
$ sudo fuser 80/tcp
上面的命令将返回负责处理指定端口的进程ID。

你可以在上面的命令中使用“-k”选项来终止与该进程ID相关联的进程,而不是打印正在运行的进程ID。
$ sudo fuser -k 80/tcp
输出:

使用此方法终止进程后,可能需要等待60秒的延迟,然后该进程才能完全关闭。这是作为一种安全措施来实现的,以避免潜在的数据损坏或冲突。如果你想立即停止正在运行的进程,你可以在“sudo kill -9 PID“命令中指定进程ID。
方法3:使用lsof
lsof是另一个强大的工具,用于标识负责管理活动系统上的特定文件、目录、网络套接字和其他系统资源的进程。几乎所有的Linux发行版都预装了它,不需要额外的安装。
要识别与特定端口关联的进程名称和ID,请使用以下命令,后跟你要检查的端口号:
$ sudo lsof -i :80
上面的命令将在多个列中返回输出,你的焦点区域仅为“COMMAND”和“PID”列。

有了进程ID后,可以使用“kill”命令终止进程。
$ sudo kill -9 36749 36751 36752
输出:

“-9”选项发送“SIGKILL”信号以主动终止进程,你也可以使用“-1”选项挂起进程(安全性较低)和“-15”选项轻轻杀死进程(默认)。
方法4:使用netstat和ss
netstat和ss是系统管理员使用最广泛的工具之一,可以快速确定与特定端口关联的进程名称和进程ID。然而,netstat被认为是一个被废除的版本,一些主要的Linux发行版已经删除了它,需要安装“net-tools”包才能使用。
在大多数Linux系统中都可以找到ss命令,它基本上是netstat的改进版本。这两个工具使用几乎相同的命令语法,其中“-tnlp”选项是最常见的,用于标识侦听端口的进程名称和进程ID,每个选项都在后面。
- “-t”:显示TCP套接字
- “-n”:避免解析服务名称
- “-l”:显示侦听套接字
- “-p”:显示进程ID和名称
要找出端口80的进程名或ID,可以使用netstat或ss命令和“-tnlp”选项,沿着使用grep命令,以便只过滤出指定端口号的数据。
$ sudo netstat -tnlp | grep -i :80
$ sudo ss -tnlp | grep -i :80
输出:

除了在grep命令中指定端口号之外,还可以使用服务名来标识其进程ID和侦听端口。
$ sudo netstat -tnlp | grep -i apache
$ sudo ss -tnlp | grep -i apache
输出:

最后,要杀死相应的进程,可以使用以下命令指定其进程ID:
$ sudo kill -9 41005
输出:

当使用“kill -p”命令终止进程时,请确保该服务没有被任何其他进程正在使用,因为强制终止它可能会导致数据损坏或丢失。
总结
在本文中,你学习了终止在特定端口上运行的进程的不同方法,这些方法适用于几乎所有主要的Linux发行版,如Debian,Ubuntu,Red Hat,Fedora,Arch,Manjaro等。
相关文章



