如何通过端口号杀死 Linux 进程如何通过端口号杀死 Linux 进程如何通过端口号杀死 Linux 进程如何通过端口号杀死 Linux 进程
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何通过端口号杀死 Linux 进程

要终止 Linux 进程,您需要它的 ID 或名称。如果你只知道它正在使用的端口,你还能杀死它吗?是的,有几种不同的方式。

杀死进程

有时,Linux 进程会变得无响应。它可能会停止正常运行,或者它可能会继续工作但忽略关闭请求,或者开始吞噬内存、CPU 或网络带宽。

无论您的动机是什么,都可以通过 Linux 命令行终止进程。经典方法是使用带有要终止进程的进程 ID 的 kill 命令。 kill 命令有一些近亲。 pkill 命令将根据名称终止一个进程,killall 将终止它能找到的共享名称部分的所有进程。

如果您对某个进程的了解只是它正在使用您计算机上的一个端口,那么仍然有一些方法可以识别并终止它。在网络术语中,“端口”可以表示物理连接,您可以在其中插入末端带有插头的电缆,例如 CAT5 或 6 网线,也可以表示软件端口。

软件端口是网络连接的最后一部分。设备的 IP 地址标识计算机或其他网络设备。计算机内部的应用程序使用不同的端口。这些提供了另一个粒度级别。网络流量已使用 IP 地址到达正确的计算机,并且通过使用端口寻址,它可以传送到正确的应用程序。

这就像邮政邮件到达酒店,然后被分拣并送到相应的房间。 IP地址就像旅馆的街道地址,房间号就像端口号。

如果您在端口上看到网络活动,但您不认识生成它的进程,或者它的行为有问题或可疑,您可能想要终止该进程。即使您只知道端口号,您也可以追踪进程并将其终止。

使用 socat 创建连接

为了让我们有一些连接要终止,我们将使用 socat 使用不同的协议创建网络连接。你需要安装 socat 。要在 Ubuntu 上安装它,请使用以下命令:

sudo apt install socat

在 Fedora 上使用 dnf:

sudo dnf install socat

在 Manjaro 上你需要输入:

sudo pacman -S socat

socat 的语法虽然有点冗长,但很简单。我们需要提供源地址和目标地址。对于其中的每一个,我们都需要提供协议、IP 地址和端口号。我们可以将 STDIN 或 STDOUT 替换为源或目标。

此命令在端口 7889 上的 TCP 侦听套接字、环回 IP 地址 127.0.0.1 和 STDOUT 之间创建连接。符号“&”在后台运行命令,因此我们保留对命令行的访问权限。

socat tcp-listen:7889,bind=127.0.0.1 stdout &

我们将再创建两个连接,以便我们有一小部分使用不同协议的套接字。我们将创建一个 UDP 连接和一个 SCTP 连接。命令中唯一改变的部分是协议。

socat udp-listen:7889,bind=127.0.0.1 stdout &
socat sctp-listen:9999,bind=127.0.0.1 stdout &

使用 Kill

当然,我们可以使用kill来终止进程,只要知道进程的ID是多少即可。要查找 PID,我们可以使用 lsof 命令。

要列出端口 7889 上使用 TCP 协议的进程的详细信息,我们使用 -i(互联网地址)选项,如下所示。

lsof -i tcp:7889

这个进程的 PID 是 3141,我们可以继续使用 kill:

sudo kill 3141

如果我们使用管道,我们可以节省一些精力。如果我们将 lsof 的输出通过管道传输到 awk 并告诉 awk 搜索包含我们感兴趣的端口(7889)的行,并且打印该行的第二个字段,我们将隔离 PID。

lsof -i tcp:7889 | awk '/7889/{print $2}'

然后,我们可以使用 xargs 将 awk 的输出通过管道传输到 kill 命令。 xargs 命令获取其管道输入并将其作为命令行参数传递给另一个命令。我们将使用 xargs 和 kill 命令。

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

我们没有得到任何视觉反馈。在典型的 Linux 方式中,没有消息就是好消息。如果你想检查进程是否已经终止,你可以再次使用 lsof。

lsof -i tcp:7889

因为 lsof 没有报告任何东西,所以我们知道没有这样的联系。

我们可以删除使用 UDP 协议的进程,只需在我们之前的命令中将“tcp”替换为“udp”即可。

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

但是,lsof 无法识别 SCTP 协议。

lsof -i sctp:7889

我们可以使用 ss 命令来做到这一点。我们使用 -S (SCTP) 选项搜索 SCTP 套接字,使用 -a (all) 选项搜索所有类型的套接字(侦听、接受、已连接等)和 -p(进程)选项列出使用套接字的进程的详细信息。

ss -Sap

我们可以使用 grep 和 awk 解析该输出。我们也可以使用 grep 和一些 PERL 正则表达式来解析它,但这种方式更容易理解。如果你打算不止一次或两次使用它,你可能会从中创建一个别名或 shell 函数。

我们会将 ss 的输出传输到 grep 并搜索我们的端口号 7889。我们会将 grep 的输出传输到 grep代码>awk。在 awk 中,我们使用 -F(分隔符字符串)选项将逗号“,”设置为字段分隔符。我们搜索一个字符串包含“pid=”,并打印该字符串中的第二个逗号分隔字段。

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}'

这给了我们字符串“pid=2859”。

我们可以再次将其通过管道传输到 awk 中,将字段分隔符设置为等号“=”并打印 that 字符串中的第二个字段,这将是等号后面的文本。

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

我们现在已经隔离了进程 ID。我们可以使用 xargs 将 PID 作为命令行参数传递给 kill。

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

这会终止在端口 7889 上使用 SCTP 协议套接字的进程。

fuser 命令

fuser 命令大大简化了事情。缺点是,它只适用于 TCP 和 UDP 套接字。从好的方面来说,这是您需要处理的两种最常见的套接字类型。我们检查过的 Ubuntu、Fedora 和 Manjaro 计算机上已经安装了 fuser 命令。

您需要做的就是使用 -k (kill) 选项,并提供端口和协议。您可以使用 -n(命名空间)选项并提供协议和端口,或者使用“正斜杠快捷格式”并将端口号放在前面。

fuser -n tcp 7889
fuser 7889/udp

终止进程的端口号、协议和 PID 打印在终端窗口中。

首先尝试定影器

它可能会安装在您正在使用的计算机上,并且协议可能是 TCP 或 UDP,因此最简单的方法很可能适合您。

©2015-2025 艾丽卡 support@alaica.com