Предоставляет ли python способ поиска дочерних процессов дочернего процесса, порожденных с помощью подпроцесса, чтобы я мог их правильно убить? Если нет, то каков хороший способ обеспечить, чтобы дети ребенка были убиты?Убивание детей детей в python с подпроцессом
ответ
Не совсем просто, но если ваше приложение работает в Linux, вы можете пройти через файловую систему/proc и создать список всех PID, PPID (родительский PID) совпадает с вашим подпроцессом.
Вздох. Поэтому я считаю, что ответ фактически нет. Спасибо. Я посмотрю, смогу ли я избежать появления подпроцессов (или автоматически их убить). – archgoon
Следующая информация относится только к Unix:
Вызов os.setsid() в дочернем процессе сделает его лидером сессии новой сессии и лидер группы процессов новой process group. Отправка SIGTERM в группу процессов отправит SIGTERM ко всему подпроцессу, который мог возникнуть в этом дочернем процессе.
Вы можете сделать это, используя subprocess.Popen(..., preexec_fn=os.setsid)
. Например:
import signal
import os
import subprocess
import time
PIPE = subprocess.PIPE
proc = subprocess.Popen('ls -laR /', shell=True,
preexec_fn=os.setsid,
stdout=PIPE, stderr=PIPE)
time.sleep(2)
os.killpg(proc.pid, signal.SIGTERM)
Запуск этого не покажет никакого вывода, но ps ax
покажет подпроцесс и ls -laR
, что порождающий прекращаются.
Но если вы закомментировать
preexec_fn=os.setsid
тогда ps ax
покажет что-то вроде
% ps ax | grep "ls -la"
5409 pts/3 S 0:00 /bin/sh -c ls -laR/
5410 pts/3 R 0:05 ls -laR/
Так что без os.setsid
, ls -laR
и оболочку, охватывающую он все еще работает. Обязательно, чтобы убить их:.
% kill 5409
% kill 5410
Спасибо, это очень помогло мне убить подпроцесс, который породил собственные процессы. – flinz
- 1. Управление подпроцессом - Убивание подпроцесса
- 2. cloneElement для детей детей
- 3. Рельсы, подсчитывающие детей детей
- 4. Относительное расположение детей от детей
- 5. Не удалось получить детей (детей)
- 6. Python XML Parsing Атрибуты для детей и больших детей
- 7. Python XML Parsing не может найти детей детей
- 8. jQuery выберите детей детей детей и т. Д.
- 9. CRM: Получить детей исключение для детей без детей
- 10. IDE для обучения детей python?
- 11. Извлечение детей из детей в firebase с помощью Ionic
- 12. Спящий критерий, как не загружать детей детей
- 13. Есть ли способ найти детей детей программы?
- 14. RecyclerView Число детей меньше, чем число детей
- 15. Убивание программы в Python
- 16. NHibernate: Сортировка результатов по свойствам детей (детей ...)
- 17. XPath для выбора детей конкретных детей & родителей
- 18. Выберите детей с jquery
- 19. Выбрать детей
- 20. Получить детей с просмотра
- 21. Простые проблемы для детей, решаемых в Python
- 22. Нумерация детей
- 23. Выбор детей
- 24. Python - получить высоту всех детей в дереве
- 25. Рекурсивный Сбор детей в Python/Django
- 26. путь_к_файлу детей
- 27. Группа детей
- 28. Подсчет количества детей, ребенка с большим количеством детей
- 29. IPC с подпроцессом Python
- 30. Путаница с подпроцессом Python
Не совсем дубликат этого (как он просто говорит, что не вызывает оболочку я искал способ, чтобы получить ребенок порожденного подпроцесса, питон породил процесс уже вызывается непосредственно): http://stackoverflow.com/questions/2638909/killing-a-subprocess-including-its-children-from-python – archgoon