Как могут отсоединяться процессы, когда я пытаюсь их убить?


0

У меня есть приложение на Linux, где я должен убить целое дерево процессов из приложения. Дерево процессов выглядит так:

app
└── parent
    ├── child1
    ├── child2
    ├── child3
    ├── child4
    └── child5

Теперь у меня есть проблемы при уничтожении дерева процессов, убивая parentЧасто случается, что несколько подпроцессов не уничтожаются, когда я пытаюсь убить parent процесс. После сигнала уничтожения дочерние процессы выглядят «отключенными», так как они находятся в дереве процессов не ниже исходного приложения. app больше. Как это может случиться?

Ответы:


1

Надежное уничтожение дерева процессов - дело непростое, есть несколько ошибок, например:

  • убийство родителя обычно не убивает его детей
  • уничтожение по группам процессов обычно завершается неудачно, если процесс-убийца находится в той же группе процессов, поскольку сам убийца также уничтожается, как правило, перед завершением своей работы
  • выявление всех потомков процесса не тривиально

Возможно, вы захотите узнать мои ответы на эти более или менее связанные вопросы и ответы.


Спасибо за указатели. Это заставило меня осознать несколько ключевых фактов и ошибок.
Stefan

1

В целом, в системах POSIX неверно, что уничтожение родительского процесса также убивает его дочерний процесс.

Особенно если вы используете kill -KILLпосле убийства родительского процесса дочерний процесс стал сиротские процессы ,

Вы можете убить весь группа процессов или поискать по родительскому pid перед тем как убить родительского. В оболочке это можно сделать с помощью:

ps --ppid <parent_pid>

В Python я бы предложил использовать psutil библиотека, особенно Process.children метод.


1
Также взгляните на ответы на этот вопрос.
running.t
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.