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