微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用python优雅地终止Windows进程?

如何解决如何使用python优雅地终止Windows进程?

我正在使用 PSUTIL 库(主要是因为它是跨平台的)来终止进程及其后代。但它正在强行关闭进程。我正在使用“.terminate”命令。我想发送一个正常的关闭信号并优雅地终止一个进程。我该怎么做?

def kill_process(self,pid,including_parent=True):

    '''
    Kill_process method will kill the process and it's descendants recursively
    '''
    err_msg_temp = None
    try:
        parent = psutil.Process(pid)
        for child in parent.children(recursive=False):
            child_pid = child.pid
            if child_pid not in deleted_processes:
                self.kill_process(child_pid)

        if including_parent:
            deleted_processes[pid] = 1
            parent.terminate()
    except Exception as e:
        err_msg_temp = str(e)

如果有跨平台命令,我也想知道。

解决方法

您是否尝试使用 child_pid.send_signal(signal.SIGTERM)

send_signal 是来自 Process 类的方法

信号模块文档: https://docs.python.org/3/library/signal.html

,

感谢 Andrew D. bond's answer 我找到了解决方案。代码在 Windows 中运行良好。

import win32con
import win32api
import win32gui
import win32process
import psutil

def enumWindowsProc(hwnd,lParam):
    if (lParam is None) or ((lParam is not None) and win32process.GetWindowThreadProcessId(hwnd)[1] == lParam):
        text = win32gui.GetWindowText(hwnd)
        if text:
            win32api.SendMessage(hwnd,win32con.WM_CLOSE)

def stop_app(app_exe):
    for process in psutil.process_iter():
        if process.name() == app_exe:
            win32gui.EnumWindows(enumWindowsProc,process.pid)

stop_app("chrome.exe")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。