Мы используем процесс python для управления длительными подпроцессами python. Иногда подпроцессы нужно убивать. Команда kill не полностью уничтожает процесс, только делает его несуществующим.Как очистить подпроцессы в python
Выполнение следующего сценария демонстрирует это поведение.
import subprocess
p = subprocess.Popen(['sleep', '400'], stdout=subprocess.PIPE, shell=False)
или
p = subprocess.Popen('sleep 400', stdout=subprocess.PIPE, shell=True)
Создаст подпроцесс.
p.terminate()
p.kill()
ничего не делает для этого процесса. Продемонстрировано по ps aux | grep sleep
$ ps aux| grep 'sleep'
User 8062 0.0 0.0 7292 764 pts/7 S 14:53 0:00 sleep 400
Процесс не был убит/из несуществующей. С помощью функции subprocess.call()
с 'kill'
и pid
в качестве аргументов выдается команда kill.
subprocess.call(['kill', str(p.pid)])
Это убьет процесс, но теперь он уже не функционирует.
$ ps aux | grep 'sleep'
User 8062 0.0 0.0 0 0 pts/7 Z+ 14:51 0:00 [sleep] <defunct>
Если очередь работает достаточно долго, он будет в конечном итоге достигнет своего максимального числа процессов, или он будет в конечном итоге пожинать несуществующие процессы и хорошо?
Если ответ первый, как я могу обрабатывать несуществующие процессы на питоне, не убивая родительский процесс?
Есть ли лучший способ убить процессы?
'kill' только посылает« сигнал »процессу и просит его прекратить его работу. Если вы, однако, «убиваете» его с помощью '-9', его убивает операционная система. Но это считается плохим способом завершения процесса. –
'kill -9' выполняет ту же функцию, что и функция' subprocess.kill() '. Я пытаюсь закончить его с помощью 'p.terminate()' или убить его с помощью 'p.kill()' он все же заканчивается как процесс зомби. – user7495615