Запуск subprocess.run как root не работает - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь убить подпроцесс через его pid, используя для этого subprocess.call (). Я получаю pid, присваивая return значение, подобное этому:

return = subprocess.Popen(["sudo", "scrolling-text-example", "-y7"]) 
x= return.pid

Когда я готов завершить этот подпроцесс, я использую этот код:

subprocess.call(["sudo","kill",str(x)])

Это не убивает подпроцесс, но если я открою терминал (скажем, x равен 1234) и наберет: sudo kill 1234, он уничтожит подпроцесс.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Я обнаружил, что основной процесс, который я идентифицирую с x = return.pid, на самом деле запускает дочерний процесс, который мне нужно убить, поэтому из идентифицированного родительского процесса нам нужно уничтожить дочерние процессы. Добавление «-P» включает дочерние процессы в этой ситуации. Мне нужна следующая структура команд:

subprocess.call(["sudo","pkill","-9","-P",x])
0 голосов
/ 28 февраля 2020

Используйте x = str(return pid) и subprocess.call(["sudo","kill","-9",x]), а затем попытайтесь предоставить root привилегии. И это позволяет превратить номер процесса в строку до вызова подпроцесса. Также, как я уже говорил, используйте -9 (или -15, если вы предпочитаете использовать это). (Попробуйте убить процесс 1014 тоже).

...