终止在 Linux 中特定端口上运行的进程

在 Linux 中终止进程通常涉及使用进程 ID 和 kill 命令。 您还可以将进程名称与 killall 命令一起使用。

这在您知道进程 ID 或名称时有效。 但在某些情况下,您可能不知道,或者您只是不一定需要知道。

为了 example,如果你想杀死在特定端口上运行的进程,你可能根本不需要知道进程 ID 或名称。 您可以根据进程使用的端口号终止进程。

让我告诉你如何去做。

根据端口号终止进程

fuser 命令与 -k (kill) 选项将结束所有正在侦听 TCP 或 UDP 端口的关联进程。 只需在中提供端口号和类型(TCP 或 UDP) fuser 命令。

例如,要结束 UDP 端口 81 上的进程,请使用 fuser 命令为:

sudo fuser -k 81/udp

同样,使用 fuser 命令终止 TCP 端口 3306 上的进程:

sudo fuser -k 3306/tcp

您可以使用 lsof 命令验证进程是否不再在目标端口上运行。

使用特定端口杀死进程的经典方式

对于那些不想使用的人 fuser, lsof 可用于确定哪些进程正在使用某个端口,然后将此信息与 kill 命令一起使用。

例如,要终止在 TCP 端口 3306 上运行的所有进程,请使用以下命令检测进程 ID:

sudo lsof -i TCP:3306

现在用它的 pid 杀死它:

 kill -9 <pid_value>

这里要注意的一件事是某些过程像 mysqldapache2 使用上述命令杀死它们后可能会重新启动。 即使您使用 killall 命令,他们仍然会在一段时间后出现。

在这种情况下,我建议您使用特定于应用程序的命令来停止服务。 为了 example杀死 Apache 在 Ubuntu 上处理,使用命令:

sudo systemctl stop apache2

这将完全终止特定进程。

包起来

本文介绍了如何终止在特定端口上运行的进程。 使用 fuser 命令,您不需要知道进程详细信息。 否则,首先获取与端口关联的进程 ID 然后杀死它的经典方法也可以。