通常,在重新启动Django Runserver时,如果我使用相同的端口号,则会收到“端口已在使用中”消息。随后,我需要每次都增加端口号以避免这种情况。
但是,并非在所有服务器上都是如此,所以我想知道如何在正在使用的当前系统上实现此目标?
顺便说一句,平台是Ubuntu 8.10
通常,在重新启动Django Runserver时,如果我使用相同的端口号,则会收到“端口已在使用中”消息。随后,我需要每次都增加端口号以避免这种情况。
但是,并非在所有服务器上都是如此,所以我想知道如何在正在使用的当前系统上实现此目标?
顺便说一句,平台是Ubuntu 8.10
sudo fuser -k 8001/tcp
Answers:
我找到了这些信息(最初来自KristinnÖrnSigurðsson)来解决我的问题:
要使用-9杀死它,您将必须列出所有正在运行的manage.py进程,例如:
ps aux | grep -i manage
如果已经在许多端口上启动,您将获得类似于以下的输出:
14770 8264 0.0 1.9 546948 40904 ? S Sep19 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8006
14770 15215 0.0 2.7 536708 56420 ? S Sep13 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8001
14770 30144 0.0 2.1 612488 44912 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8000
14770 30282 0.0 1.9 678024 40104 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8002
14770 30592 0.0 2.1 678024 45008 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8003
14770 30743 0.0 2.1 678024 45044 ? S Sep18 0:00 /usr/local/bin/python manage.py runserver 0.0.0.0:8004
然后,您必须为正确的manage.py进程(python manage.py runserver ...等)选择pid(这是左侧的第二个数字),然后执行以下操作:
kill -9 pid
对于上面的示例,如果要释放端口8000,请执行以下操作:
kill -9 30144
如果ps aux
命令(按照Meilo的回答)没有列出您要杀死的进程,但显示了netstat -np | grep 8004
网络活动中处于活动状态的端口,请尝试此命令(在Ubuntu上有效)。
sudo fuser -k 8004/tcp
其中,8004是您要关闭的端口号。这将终止与端口8004相关的所有进程。
sudo lsof -t -i tcp:8000 | xargs kill -9
帽子提示:stackoverflow.com/questions/20239232/...
不,他不是一个白痴家伙。我也一样 显然,这是python UUID进程的一个错误,在django服务器关闭后,该UUID进程继续运行很长时间,这将端口绑定了。
fuser -k 8000/tcp
在终端中运行,它可以在ubutu中运行。8000
是港口。
我使用pkill -If 'manage.py'
(-I
表示交互式,-f
不仅仅匹配进程名称)。请参阅如何杀死具有给定部分名称的所有进程?有关pkill的更多信息。
如果您尝试的端口号是8001,请使用此命令
sudo fuser -k 8001/tcp
就像mipadi所说的那样,您应该终止服务器(ctrl + c)并返回到命令提示符,然后manage.py runserver
再次调用。
唯一可能破坏此状况的是,如果您设法使runserver充当守护程序。如果是这样的话,我猜你使用Django的测试服务器为实际的Web服务器,你应该不这样做。Django测试服务器是单线程的,速度慢且脆弱,仅适用于本地开发。
从https://stackoverflow.com/a/27138521/1467342转发:
您可以使用此脚本代替./manage.py runserver
。我把它放进去了scripts/runserver.sh
。
#!/bin/bash
pid=$(ps aux | grep "./manage.py runserver" | grep -v grep | head -1 | xargs | cut -f2 -d" ")
if [[ -n "$pid" ]]; then
kill $pid
fi
fuser -k 8000/tcp
./manage.py runserver
在manage.py中添加以下库
导入os
导入子流程
导入重新
现在,在__name__ ==“ __main__”之后添加以下python代码:
ports = ['8000']
popen = subprocess.Popen(['netstat', '-lpn'],
shell=False,
stdout=subprocess.PIPE)
(data, err) = popen.communicate()
pattern = "^tcp.*((?:{0})).* (?P<pid>[0-9]*)/.*$"
pattern = pattern.format(')|(?:'.join(ports))
prog = re.compile(pattern)
for line in data.split('\n'):
match = re.match(prog, line)
if match:
pid = match.group('pid')
subprocess.Popen(['kill', '-9', pid])
这将首先找到端口8000的进程ID,将其杀死,然后重新启动您的项目。现在,您无需每次手动杀死pid。
netstat -ntlp
在这里查看我的完整答案。https://stackoverflow.com/a/34824239/5215825
netstat -ntlp
仅显示活动的连接,端口和PID。实际上,获取PID的更好方法是ps aux
或更具体ps aux | grep python
地查看python和python3实例。
how to kill port 8000
但它也适用于我。通过更改标题并使范围更加笼统,我们以后可以避免一些多余的问题。