You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从服务端代码内终止同一项目下所有正在运行的Python文件

从server进程内终止client和server全部运行进程的方案

分三种常见场景实现:

场景1:client进程由server代码通过subprocess启动

这种情况处理最简单,不需要额外依赖:

  • 启动client时保存进程实例:
import subprocess
import sys

# 启动client时记录进程对象,client.py替换为你实际的client文件名
client_proc = subprocess.Popen([sys.executable, "client.py"])
  • 需要终止时直接调用终止方法:
# 先终止client进程
client_proc.terminate()
# 再终止server自身
sys.exit()

场景2:client和server是独立启动的两个进程(同主机运行)

需要用到第三方进程管理库psutil,先执行安装命令:
pip install psutil
在server需要触发停止的位置加入如下代码:

import os
import psutil
import sys

# 遍历所有Python进程
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
    try:
        # 筛选Python进程,且命令行包含目标文件名
        if proc.name() in ['python', 'python3'] and proc.cmdline():
            cmd_str = ' '.join(proc.cmdline())
            # 匹配client和server的执行文件名,替换为你实际的文件名
            if 'client.py' in cmd_str or 'server.py' in cmd_str:
                proc.terminate()
                proc.wait(timeout=3)
    except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.TimeoutExpired):
        pass

# 兜底退出server自身
sys.exit()

注意:如果你的启动命令包含自定义参数、或者文件名有重名情况,需要调整匹配逻辑,避免误杀其他无关Python进程。


场景3:client运行在其他远程主机

需要提前在client端增加停止信号监听逻辑:

  • client端启动socket/HTTP服务监听指定端口,收到停止指令后调用sys.exit()退出自身
  • server需要终止时先向所有client的监听端口发送停止指令,确认client退出后再终止自身进程

内容的提问来源于stack exchange,提问作者Mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:02