Как получить pid процесса, запущенного subprocess.run, и убить его - PullRequest
0 голосов
/ 28 мая 2020

Я использую Windows 10 и Python 3.7.

Я выполнил следующую команду.

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

Файл .exe, запущенный с помощью этой команды, я хочу force-quit при нажатии кнопки или при выполнении функции.

Глядя на прошлый вопрос , было указано, что способ принудительного выхода - это получить PID и выполнить OS.kill следующим образом.

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

Однако я не знаю, как получить PID процесса, запущенного в subprocess.run.

Что мне делать?

1 Ответ

1 голос
/ 28 мая 2020

Назначьте переменную вашему подпроцессу

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...