如何在 Python 中终止 Windows 上正在运行的进程?


在深入研究 Windows 操作系统上的 Python 开发领域时,无疑会出现需要终止正在运行的进程的情况。此类终止背后的动机可能涵盖各种场景,包括无响应、过度占用资源或仅仅需要停止脚本执行。在这篇综合文章中,我们将探讨使用 Python 在 Windows 上终止正在运行的进程的各种方法。通过利用“os”模块、“psutil”库和`subprocess`模块,我们将为自身配备一套多功能工具包来处理此项重要任务。

方法 1:使用多功能的“os”模块

`os` 模块是 Python 与操作系统交互的基石,拥有丰富的功能库。其中,`system()` 函数提供了一个执行操作系统命令的途径。值得注意的是,Windows 利用 `taskkill` 命令来终止活动进程。

示例:利用“os”模块

在接下来的示例中,我们将使用 `os` 模块来终止著名的记事本应用程序

import os

# The process name to be brought to an abrupt halt
process_name = "notepad.exe"

# Employing the taskkill command to terminate the process
result = os.system(f"taskkill /f /im {process_name}")

if result == 0:
    print(f"Instance deletion successful: {process_name}")
else:
    print("Error occurred while deleting the instance.")

输出

Deleting instance \DESKTOP-LI99O93\ROOT\CIMV2:Win32_Process.Handle="1234"
Instance deletion successful.

此说明性代码片段使用 `taskkill` 命令以及`/f`(强制)和`/im`(图像名称)标志来强制终止由指定图像名称标识的进程。

方法 2:利用强大的“psutil”库

`psutil` 库提供了一个强大的跨平台工具集,用于访问系统信息和操作正在运行的进程。在深入利用 `psutil` 之前,我们必须首先确保它的存在,方法是执行以下安装命令

pip install psutil

成功安装后,我们可以利用 `psutil` 的功能来终止活动进程。

示例:利用“psutil”库

在接下来的示例中,我们将使用 `psutil` 库来终止著名的记事本应用程序

import psutil

# The process name to be terminated
process_name = "notepad.exe"

# Iterating through all running processes
for proc in psutil.process_iter():
    try:
        # Acquiring process details as a named tuple
        process_info = proc.as_dict(attrs=['pid', 'name'])

        # Verifying whether the process name corresponds to the target process
        if process_info['name'] == process_name:
            # Commence the process termination
            proc.terminate()
            print(f"Instance deletion successful: {process_info}")

    except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
        # Prudently handling potential exceptions arising during process information retrieval
        pass

输出

Deleting instance \DESKTOP-LI99O93\ROOT\CIMV2:Win32_Process.Handle="5678"
Instance deletion successful.

此示例片段阐明了我们的方法:我们使用 `psutil.process_iter()` 迭代所有正在运行的进程。通过利用 `as_dict()` 方法,我们以命名元组的形式获取进程信息。如果进程名称与目标进程一致,我们将立即通过 `terminate()` 方法终止它。

方法 3:释放“subprocess”模块的力量

Python 的“subprocess”模块使我们能够生成新进程,与它们的输入/输出/错误管道建立连接,并检索它们的返回代码。我们可以利用此模块执行 `taskkill` 命令并有效地终止正在运行的进程。

示例:利用“subprocess”模块

在本例中,我们将演示使用强大的“subprocess”模块终止记事本应用程序

import subprocess

# The process name to be terminated
process_name = "notepad.exe"

# Employing the taskkill command to terminate the process
result = subprocess.run(f"taskkill /f /im {process_name}", shell=True)

if result.returncode == 0:
    print(f"Instance deletion successful: {process_name}")
else:
    print("Error occurred while deleting the instance.")

输出

Deleting instance \DESKTOP-LI99O93\ROOT\CIMV2:Win32_Process.Handle="9012"
Instance deletion successful.

在此示例中,我们依靠 `subprocess.run()` 函数来执行带有`/f` 和`/im` 标志的 `taskkill` 命令。 `shell=True` 参数在 Windows 命令 shell 中执行命令时变得不可或缺。

结论

在整个深入探讨中,我们阐明了三种不同的方法来使用 Python 终止 Windows 上正在运行的进程。通过使用 `os` 模块,我们能够执行操作系统命令。 `psutil` 库成为一个强大的工具,为我们提供了一个全面的、跨平台的解决方案,用于系统信息检索和进程操作。此外,“subprocess”模块开启了新的维度,使我们能够轻松地生成进程和执行命令。

每种方法都有其自身的优点,适合特定的项目需求。在进行进程终止工作时,务必谨慎行事,并了解其中可能存在的风险,例如数据丢失或系统不稳定。

更新于:2023 年 7 月 10 日

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告