python - 如何获取 subprocess.run 启动的进程的 pid 并杀死它

标签 python windows subprocess

我使用的是 Windows 10 和 Python 3.7。

我运行了以下命令。

import subprocess
exeFilePath = "C:/Users/test/test.exe"
subprocess.run(exeFilePath)

使用此命令启动的.exe文件,我想在单击按钮或执行功能时强制退出。

Looking at a past question ,已经指出强制退出的方法是获取PID并执行OS.kill如下。

import signal
os.kill(self.p.pid, signal.CTRL_C_EVENT)

但是,我不知道如何获取subprocess.run中启动的进程的PID。

我该怎么办?

最佳答案

为你的子进程分配一个变量

import os
import signal
import subprocess

exeFilePath = "C:/Users/test/test.exe"
p = subprocess.Popen(exeFilePath)
print(p.pid) # the pid
os.kill(p.pid, signal.SIGTERM) #or signal.SIGKILL 

在相同的情况下,进程有子进程 过程。您需要杀死所有进程才能终止它。在这种情况下,您可以使用 psutil

#python -m pip install —user psutil 

import psutil

#remember to assign subprocess to a variable 

def kills(pid):
    '''Kills all process'''
    parent = psutil.Process(pid)
    for child in parent.children(recursive=True):
        child.kill()
    parent.kill()

#assumes variable p
kills(p.pid)

这将杀死该 PID 中的所有进程

关于python - 如何获取 subprocess.run 启动的进程的 pid 并杀死它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62066599/

相关文章:

java - 有人知道如何自动在手机屏幕上找到坏点吗?

python - 选择以给定字符串开头的文件

python - 'bytes' 对象没有属性 'encode'

windows - Vim 。 Windows 中保存的文件的编码问题

c++ - 防止 McAfee Dll 注入(inject)

python - 将对数正态分布拟合到已经装箱的数据 python

Windows 中的 C 标准库链接

python - 如何将带有空格的字符串作为单个值从 Python 发送到 Bash 子进程?

python - 子进程启动两个进程而不是一个

如果需要多个标准输入,python asyncio 会死锁