[求助] Python在Windows下使用Django开发时运行命令执行完后无法结束进程

windows下用django进行开发的时候,进入虚拟环境后执命令,例如:python manage.py后,命令已经执行完了,但是无法结束退出,Ctrl+c也没用,或者有时候报错完了,但光标还是一直在闪烁等待,没办法进一步操作,同样无法ctrl+c退出,只能将cmd关闭。 不知道问题表述清楚没有,没说清楚的我会继续补充,希望有人知道问题所在的能告诉我,谢谢!


[求助] Python在Windows下使用Django开发时运行命令执行完后无法结束进程

1 回复

这个问题我遇到过,一般是Django的开发服务器没有正常关闭导致的。

最直接的方法是按 Ctrl+C 强制终止进程。如果控制台窗口已经关闭,但进程还在后台运行,可以这样处理:

1. 查找并结束进程(命令行方式):

# 查找所有python进程
tasklist | findstr python

# 或者直接结束所有python进程(强制)
taskkill /F /IM python.exe

2. 使用Python代码确保进程正确退出:

# 在manage.py同级目录创建stop_server.py
import os
import signal
import subprocess
import sys

def stop_django_server():
    # 查找占用8000端口的进程(默认Django端口)
    try:
        result = subprocess.run(
            ['netstat', '-ano', '|', 'findstr', ':8000'],
            capture_output=True,
            text=True,
            shell=True
        )
        
        if result.stdout:
            lines = result.stdout.strip().split('\n')
            for line in lines:
                if 'LISTENING' in line:
                    pid = line.strip().split()[-1]
                    os.kill(int(pid), signal.SIGTERM)
                    print(f"已终止进程 PID: {pid}")
                    return True
    except Exception as e:
        print(f"错误: {e}")
    
    print("未找到运行中的Django服务器")
    return False

if __name__ == "__main__":
    stop_django_server()

3. 预防措施 - 使用更好的启动方式:

# 使用subprocess启动,便于管理
import subprocess
import time

def start_server():
    """启动Django服务器并返回进程对象"""
    proc = subprocess.Popen(
        ['python', 'manage.py', 'runserver'],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )
    return proc

# 使用时
server = start_server()
# 需要停止时
server.terminate()  # 优雅停止
server.wait()       # 等待进程结束

4. 如果经常遇到这个问题,建议:

  • 检查是否有代码在 __del__ 或析构函数中创建了死循环
  • 确保没有未关闭的数据库连接或文件句柄
  • 考虑使用 python manage.py runserver --noreload 排除自动重载的影响

我一般用第一个方法,简单直接。

回到顶部