Linux下如何根据端口号杀死进程
在任何给定时刻,您的 Linux 系统都同时运行多个进程。其中一些进程如果用于上传或下载数据,则可以访问您的网络。这些进程通常将自己绑定到特定的端口号,这可以让我们根据端口号杀死进程。
Kill 命令是系统管理员停止进程运行的一种方法。但是,kill 命令仅接受进程 ID 作为参数。 pkill
和 killall
命令是另外两个选项,但它们接受进程名称作为参数。
为了根据端口号终止进程,我们需要使用“fuser”命令,或将其他命令行工具与常用的“kill”命令结合使用。在本教程中,我们将向您展示在 Linux 中根据端口号终止进程的多种方法。
在本教程中您将学习:
如何使用
fuser
终止 TCP 或 UDP 端口上的进程如何使用
kill
终止 SCTP 端口上的进程如何使用
ss
和lsof
查看端口正在使用的进程如何使用
socat
将进程绑定到端口以进行测试
如何查看哪个进程正在使用某个端口
如前所述,侦听传入连接的进程会将自身绑定到端口。大多数进程将始终使用相同的端口,除非它们已配置为使用非默认端口。例如,SSH 使用端口 22,HTTP 使用端口 80,MySQL 使用端口 3306 等。有了这些知识,我们就能够弄清楚某个服务正在哪个端口上运行。
lsof命令
要查看系统上正在使用的端口列表,lsof
命令会派上用场。例如,以下命令将列出有关哪些进程正在使用 TCP 端口 80 的信息。
$ sudo lsof -i TCP:80
与其他信息一起,lsof
命令为我们提供了使用指定端口的进程的进程 ID。它还可以在 UDP 端口上工作。要了解有关如何使用 lsof 的更多信息,请查看我们的 lsof Linux 命令指南及其示例教程。
SS命令
另一个可用于查看哪些进程正在使用特定端口的命令是 ss 命令。有些用户可能更喜欢它而不是 lsof
,但就我个人而言,我们发现 lsof
在这种情况下更容易使用。但是,ss
能够列出使用其他协议(例如 SCTP 端口)的进程。
$ ss -Slp
上述命令的输出将显示 SCTP 使用的所有进程和端口。要了解有关如何使用 ss 的更多信息,请查看我们的在 Linux 上使用 ss 命令的教程。
使用这两个工具将帮助我们确定哪个进程 ID 正在某个端口上运行,并且还可以方便地将这些进程 ID 传递给以下一些示例中的 kill
命令。
使用 socat 将进程绑定到端口
为了使测试以下命令更容易,我们可以使用 socat 命令创建一个虚拟进程,将其自身绑定到我们选择的端口。
将进程绑定到 TCP 端口 8080:
$ socat tcp-listen:8080,bind=127.0.0.1 stdout &
将进程绑定到 UDP 端口 8080:
$ socat udp-listen:8080,bind=127.0.0.1 stdout &
将进程绑定到 SCTP 端口 8080:
$ socat sctp-listen:8080,bind=127.0.0.1 stdout &
这些示例会将您的流程置于后台。然后,我们可以使用下面的命令来测试终止进程。
根据端口号杀死进程示例
对于侦听 TCP 或 UDP 端口的进程,
fuser
命令和-k
(终止)选项将为您终止相关进程。只需在命令中指定端口类型(TCP 或 UDP)和端口号即可。例如,这将终止使用 TCP 端口 80 的进程。$ fuser -k 8080/tcp
或者使用
fuser
终止 UDP 端口 8080 上的进程:$ fuser -k 8080/udp
请记住随后使用 lsof 命令来确认没有进程正在使用该端口。
如果您不想使用
fuser
,可以通过lsof
命令查找正在使用端口号的进程ID,然后将该数据传递给>kill
命令。例如,这将终止使用 TCP 端口 8080 的所有进程。$ lsof -i tcp:8080 | awk '/8080/{print $2}' | xargs kill
要使用不同协议(例如 SCTP)终止进程,我们可以使用 ss 命令并将 PID 通过管道传递给 xargs 和 Kill 命令。例如,以下命令将终止使用 SCTP 端口 8080 的所有进程。
$ ss -Slp | grep -Po ':8080\s.*pid=\K\d+(?=,)' | xargs kill
结束语
在本教程中,我们了解了如何根据 Linux 系统上使用的端口号来终止进程。 fusionr 命令是我们用于这项工作的主要工具,但 Linux 因向用户提供不止一种方法来完成任务而闻名。作为替代方案,lsof
和 ss
命令可以帮助我们确定所需的信息,并且与 kill
命令结合使用可以产生与定影器
。