如何获取由 subprocess.run 启动的进程的 pid 并杀死它
How to get the pid of the process started by subprocess.run and kill it
我正在使用 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 中的所有进程
我正在使用 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 中的所有进程