如何清除目标端口上运行的进程?

Posted

技术标签:

【中文标题】如何清除目标端口上运行的进程?【英文标题】:How can I clear the process running on my target port? 【发布时间】:2022-01-13 02:38:25 【问题描述】:

我一直在关注this article,试图从头开始创建我的第一个 Flask API。我不得不在工作中更新我的电脑,我认为我没有事先成功关闭终端。

当我现在尝试从项目的主目录运行我的应用程序时,在标题为“使用 Flask 创建 RESTful 端点”的部分中,我得到了一个长长的堆栈跟踪,并以此结尾:

  File "/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/socketserver.py", line 466, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 48] Address already in use

其他类似的问题表明这是由于另一个进程使用了​​我尝试访问的端口。为了解决这个问题,我使用了以下命令:

ps -fA | grep python

返回:

501 12797 12759   0 11:15PM ??         0:03.97 /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer) --ms-enable-electron-run-as-node /Users/nfeldman1995/.vscode/extensions/ms-python.vscode-pylance-2021.12.0/dist/server.bundle.js --cancellationReceive=file:50e28be741e040fa2f7efc8dbdcf8a4ca200512639 --node-ipc --clientProcessId=12759
501 13126 12421   0 11:30PM ttys000    0:00.00 grep python

这让我感到很困惑。其他文章表明我应该看到一行输出如下:

 502 89332 12877 0 3:40PM ttys00 0:00.15 python -m SimpleHTTPServer

但是,此输出中似乎没有运行“SimpleHTTPServer”,所以我不知道要杀死哪个进程。我尝试使用命令 kill <process#> 杀死其他两个任务,但这并没有解决问题。

转到 localhost:5000(我尝试定位的端口)给我一个 404 错误。

更新:这是 lsof -i :5000 的输出

COMMAND     PID         USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
ControlCe 13218 nfeldman1995   27u  IPv4 0xdf2d97d6ad526f5      0t0  TCP *:commplex-main (LISTEN)
ControlCe 13218 nfeldman1995   28u  IPv6 0xdf2d97d52942a1d      0t0  TCP *:commplex-main (LISTEN)

我尝试运行kill -9 13218 并再次运行我的应用程序并得到同样的错误。运行 lsof,然后终止进程(或者我认为),然后再次运行 lsof 似乎表明新进程不断被创建。 (使用不同的进程 ID 号)。

这是我的 bootstrap.sh 文件,应 Jon 的要求:

#!/bin/sh
export FLASK_APP=./cashman/index.py
source $(pipenv --venv)/bin/activate
flask run -h 0.0.0.0

【问题讨论】:

【参考方案1】:

较新版本的 macOS 上端口 5000 的问题是 AirPlay 使用它;这就是为什么您会看到“ControlCenter”在端口上侦听。要摆脱它,请进入系统设置并关闭“AirPlay 接收器”或类似的东西(我不能确切地说;我现在在一台太旧的电脑上)。谷歌搜索“macos port 5000”会出现几个点击。

【讨论】:

我有 90% 的把握这有效,我现在可以在 localhost 端点看到我期待的 JSON!非常感谢,这让我发疯了编辑:你解决了!非常感谢 经过一番搜寻 - 它在 Flask 文档中 - flask.palletsprojects.com/en/2.0.x/server/… 我只是要签署一条评论,说它有点有趣,这种随机和晦涩的东西可能会让 Flask 的制造商不得不把它写进他们的文档中。【参考方案2】:

您可以使用lsof 列出进程、它们的 PID 和它们正在侦听的 TCP 端口,如下所示:

sudo lsof -iTCP -sTCP:LISTEN -P -n

【讨论】:

在这种情况下lsof -i :5000 应该没问题 这些命令的输出有点太长,无法作为评论回复发布,因此我编辑了原始帖子。你能看到吗? @Nathan 您能否将您如何运行 Flask 添加到您的 Q 中?如果它不断重新启动,听起来你已经在某种主管/守护进程作业下得到它 这是我的 bootstrap.sh 文件。这是你要找的吗?如果您想要真正彻底的回应,详细信息在我在帖子开头链接的文章中,在以“虚拟环境(virtualenv)”开头的部分中 抱歉,显然无法在评论中发布代码。将文件中的代码添加到底部的问题中。

以上是关于如何清除目标端口上运行的进程?的主要内容,如果未能解决你的问题,请参考以下文章

XCode & Instruments,如何清除进程列表

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

如何关闭占用80端口的程序?

如何停止在端口 3000 上运行 rails 服务器的 nohup 进程

80端口被system 占用

如何清除进程命令行?