python 批量终止进程exe

cpp 复制代码
import os
import sys
import subprocess
import platform

def kill_process_by_name(process_name):
    """
    根据进程名称杀死进程
    
    Args:
        process_name: 进程名称,例如 'notepad.exe' 或 'chrome.exe'
    
    Returns:
        bool: 成功返回True,失败返回False
    """
    system = platform.system().lower()
    
    try:
        if system == "windows":
            # Windows系统使用taskkill命令
            # /f 强制终止,/im 指定镜像名称
            cmd = f'taskkill /f /im {process_name}'
            result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
            
            if result.returncode == 0:
                print(f"成功终止进程: {process_name}")
                return True
            else:
                print(f"终止进程失败: {process_name}")
                print(f"错误信息: {result.stderr}")
                return False
                
        elif system == "linux" or system == "darwin":  # darwin是macOS
            # Linux/Mac系统使用pkill命令
            cmd = f'pkill -f {process_name}'
            result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
            
            if result.returncode == 0:
                print(f"成功终止进程: {process_name}")
                return True
            else:
                print(f"终止进程失败: {process_name}")
                print(f"错误信息: {result.stderr}")
                return False
        else:
            print(f"不支持的操作系统: {system}")
            return False
            
    except Exception as e:
        print(f"执行出错: {e}")
        return False

def kill_processes_by_names(process_names):
    """
    根据多个进程名称列表杀死进程
    
    Args:
        process_names: 进程名称列表
        
    Returns:
        dict: 每个进程的执行结果
    """
    results = {}
    for process_name in process_names:
        results[process_name] = kill_process_by_name(process_name)
    return results

def get_running_processes():
    """
    获取当前运行的所有进程名称(仅限Windows)
    """
    system = platform.system().lower()
    
    if system == "windows":
        try:
            cmd = 'tasklist'
            result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
            if result.returncode == 0:
                processes = []
                lines = result.stdout.split('\n')
                # 跳过标题行
                for line in lines[3:]:
                    if line.strip():
                        # 提取进程名称
                        process_name = line.split()[0]
                        processes.append(process_name)
                return processes
            else:
                print(f"获取进程列表失败: {result.stderr}")
                return []
        except Exception as e:
            print(f"获取进程列表出错: {e}")
            return []
    else:
        print("此功能目前仅支持Windows系统")
        return []

def interactive_kill():
    """
    交互式杀死进程
    """
    print("=== 进程终止工具 ===")
    
    system = platform.system().lower()
    if system == "windows":
        print("\n当前运行的进程:")
        processes = get_running_processes()
        if processes:
            # 显示前20个进程作为示例
            for i, proc in enumerate(processes[:20], 1):
                print(f"{i}. {proc}")
            if len(processes) > 20:
                print(f"... 还有 {len(processes)-20} 个进程")
        
        print("\n请输入要终止的进程名称(例如:notepad.exe)")
        print("提示:可以输入多个进程名称,用逗号分隔")
        
    else:
        print("请输入要终止的进程名称(例如:firefox)")
        print("提示:可以输入多个进程名称,用逗号分隔")
    
    user_input = input("\n进程名称: ").strip()
    
    if not user_input:
        print("未输入进程名称")
        return
    
    # 支持多个进程名称
    process_names = [name.strip() for name in user_input.split(',')]
    
    if len(process_names) == 1:
        kill_process_by_name(process_names[0])
    else:
        results = kill_processes_by_names(process_names)
        
        print("\n执行结果:")
        for name, success in results.items():
            status = "✓ 成功" if success else "✗ 失败"
            print(f"{name}: {status}")

def kill_range_processes(start=1, end=100):
    """
    批量杀死指定范围的进程(例如:1.exe 到 100.exe)
    
    Args:
        start: 起始编号
        end: 结束编号
    """
    process_names = []
    for index in range(start, end + 1):
        single_process_name = str(index) + ".exe"
        process_names.append(single_process_name)
    
    print(f"准备终止进程: {process_names[:10]}..." if len(process_names) > 10 else process_names)
    print(f"共 {len(process_names)} 个进程")
    
    # 询问确认
    confirm = input(f"\n确认要终止这 {len(process_names)} 个进程吗?(y/n): ")
    if confirm.lower() == 'y':
        print("\n开始终止进程...")
        results = kill_processes_by_names(process_names)
        
        # 统计结果
        success_count = sum(1 for success in results.values() if success)
        fail_count = len(results) - success_count
        
        print(f"\n执行完成!成功: {success_count}, 失败: {fail_count}")
    else:
        print("操作已取消")

def main():
    """
    主函数,支持命令行参数和交互模式
    """
    # 方式1:直接批量终止 1.exe 到 100.exe
    # 如果需要执行这个功能,取消下面的注释
    kill_range_processes(1, 100)
    
    # 方式2:根据命令行参数
    # if len(sys.argv) > 1:
    #     # 命令行参数模式
    #     process_name = sys.argv[1]
    #     print(f"正在终止进程: {process_name}")
    #     kill_process_by_name(process_name)
    # else:
    #     # 交互模式
    #     interactive_kill()

if __name__ == "__main__":
    # 使用示例
    print("Python 进程终止工具")
    print("=" * 50)
    
    # 示例1:终止单个进程
    # kill_process_by_name("notepad.exe")
    
    # 示例2:终止多个进程
    # kill_processes_by_names(["notepad.exe", "calc.exe"])
    
    # 示例3:交互模式(推荐)
    # interactive_kill()
    
    # 示例4:批量终止 1.exe 到 100.exe(当前启用)
    main()
    
    # 示例5:自定义范围
    # kill_range_processes(1, 50)  # 终止 1.exe 到 50.exe
    # kill_range_processes(200, 300)  # 终止 200.exe 到 300.exe
相关推荐
wj30558537814 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
为何创造硅基生物14 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好14 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李14 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅15 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
qingfeng1541515 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
之歆15 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
cen__y16 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm