在Linux中如何杀死特定端口上运行的进程?

在Linux中如何杀死特定端口上运行的进程?

技术背景

在Linux系统中,当我们启动一个服务或者应用程序时,它可能会绑定到特定的端口上。有时候,我们需要停止该服务或者重新启动它,就需要杀死占用该端口的进程。这在开发、测试或者服务器管理中是常见的操作。

实现步骤

1. 使用 fuser 命令

  • 列出绑定到特定端口的进程的PID:
1
fuser 8080/tcp
  • 杀死绑定到特定端口的进程:
1
fuser -k 8080/tcp

2. 使用 lsof 命令

  • 列出监听特定端口的所有进程:
1
lsof -i:8080
  • 杀死监听特定端口的进程:
1
kill $(lsof -t -i:8080)
  • 强制杀死监听特定端口的进程:
1
kill -9 $(lsof -t -i:8080)

3. 使用 netstat 命令

  • 结合 netstatgrep 查找特定端口的进程信息:
1
netstat -ap | grep :8080

输出示例:

1
tcp6       0      0 :::8080       :::*    LISTEN      1880/java 
  • 根据输出的PID杀死进程:
1
kill -9 1880

4. 其他方法

  • 只杀死特定端口上处于 LISTEN 状态的进程:
1
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
  • 使用 npx kill-port(需要安装 npm):
1
npx kill-port 3000

核心代码

查找并杀死特定端口进程的脚本

1
2
3
4
5
6
7
8
9
#!/bin/bash
port=8080
pid=$(lsof -t -i:$port)
if [ -n "$pid" ]; then
kill -9 $pid
echo "Process $pid on port $port has been killed."
else
echo "No process found on port $port."
fi

最佳实践

  • 在杀死进程之前,最好先使用 lsofnetstat 命令查看进程的详细信息,确保杀死的是正确的进程。
  • 如果进程无法正常终止,可以使用 -9 信号强制杀死进程,但这可能会导致数据丢失或其他问题。
  • 可以将常用的命令封装成脚本,方便后续使用。

常见问题

1. 没有权限杀死进程

很多情况下,需要以 root 用户身份运行命令。可以使用 sudo 来提升权限,例如:

1
sudo kill -9 $(lsof -t -i:8080)

2. 命令找不到

某些系统可能没有安装 lsoffuser 等命令,可以使用包管理器进行安装,例如:

1
2
sudo apt-get install lsof
sudo apt-get install psmisc # 包含 fuser 命令

3. 进程仍然占用端口

如果使用上述方法后,进程仍然占用端口,可能是因为进程处于异常状态。可以尝试重启系统来释放端口。


在Linux中如何杀死特定端口上运行的进程?
https://119291.xyz/posts/how-to-kill-a-process-running-on-particular-port-in-linux/
作者
ww
发布于
2025年6月4日
许可协议