Мне было интересно, есть ли способ поймать сигкилл у убийцы OOM. У меня есть очередь задач, и каждый так часто создается гигантская задача, убитая OOM. Это:python sigkill стратегии лова
catch Exception as ex:
# clean up!
не работает, поскольку SIGKILL не может быть пойман. Итак ... есть ли какая-то стратегия для очистки после SIGKILL? Могу ли я развиваться и наблюдать за процессом ребенка? Если это так, любые ресурсы, открытые дочерним процессом, должны быть заранее известны родителям? Или я мог просто сделать какую-то версию
ps -ef | grep <child pid> | xargs kill -9 (you get the idea...)
В настоящее время, если я не убирать после OOM убить, я оставляю за большим количеством дочерних процессов и других вещей, которые просто делают это хуже, когда задача повторена, и достаточно скоро сервер недоступен.
Наконец, это достаточно просто сделать:
kill -9 <process id>
, чтобы проверить эту точную ситуацию?
Большое спасибо!
Есть ли какая-либо передовая практика или общепринятая мудрость о том, как очистить? Если у меня есть 10 вещей, открывающих подпроцесс ... должен ли я искать процесс с родительским id == 1 и принудительно убивать их? Я немного удивлен, что нет общего способа сделать это ... но я думаю, если это (должно быть) довольно необычное, все придумывают свои собственные? – Hoopes
Если у вас есть куча подпроцессов, у них должен быть механизм контроля других процессов, если они будут убиты. –
FWIW, я использовал отличную библиотеку psutil, чтобы сделать именно это - очиститься при следующем запуске процесса, выполнив поиск ожидаемых имен процессов с ppid 1, принадлежащих пользователю процесса. – Hoopes