Как перехватить Skip рендера?

Ответить
Аватара пользователя
AlexeySmolenchuk
Сообщения: 40
Зарегистрирован: Пт июл 14, 2017 10:38 am

Как перехватить Skip рендера?

Сообщение AlexeySmolenchuk »

Есть ситуации, когда при прерывании таска(рестарт, eject, stop), дочерний процесс(hick, nuke) не завершается и продолжает нагружать процессор или просто не высвобождают память. Есть ли возможность как-то перехватить такое прерывание таска или может быть как-то более хитро организовать сам процесс его формирования?
Аватара пользователя
Timur
Site Admin
Сообщения: 178
Зарегистрирован: Вс июл 09, 2017 4:59 pm
Откуда: Королёв
Контактная информация:

Re: Как перехватить Skip рендера?

Сообщение Timur »

Вообще-то там уже не мало хитростей сделано для того чтобы закрывались все дочерние процессы.
Но пределу совершенства нету. Можно дальше ковырять в коде этот вопрос.
Правда я с такими ситуяциями практически не сталкиваюсь, особенно на линухе.
Тимур Хайрулин
CGRU 3.3.1 Ubuntu 22.04LTS, MS Windows 10 (clients only).
Аватара пользователя
AlexeySmolenchuk
Сообщения: 40
Зарегистрирован: Пт июл 14, 2017 10:38 am

Re: Как перехватить Skip рендера?

Сообщение AlexeySmolenchuk »

С hick это однозначно проявляется.
Можешь в двух словах рассказать какие механизмы ты уже применил, и как убедиться что они отрабатывают?
Аватара пользователя
Timur
Site Admin
Сообщения: 178
Зарегистрирован: Вс июл 09, 2017 4:59 pm
Откуда: Королёв
Контактная информация:

Re: Как перехватить Skip рендера?

Сообщение Timur »

Да в общем-то применен достаточно классический метод для линуха.
Сразу после fork и до exec дочерний процесс вызывает фи-ю которая его сетапит:
https://github.com/CGRU/cgru/blob/maste ... m.cpp#L430

Она очень простая:
https://github.com/CGRU/cgru/blob/maste ... ss.cpp#L41
Она создаёт сеанс setsid.

А потом, когда мы хотим кильнуть, мы отправляем сигнал группе killpg( getpgid( m_pid), SIGKILL);
https://github.com/CGRU/cgru/blob/maste ... s.cpp#L636

В инернете мануалов на эти системные вызовы и вообще куча инфы на тему как завешать дочерние процессы.

Так же важно знать что афрендер сначала посылает SIGTERM:
https://github.com/CGRU/cgru/blob/maste ... s.cpp#L622
И даёт какое-то время процессу завершиться самому. И только по истечению этого времени он убивает процесс, если тот ещё не вышел.
Некоторые процессы удаляют временные файлы, и делают что-то ещё, если им что-то небходимо для корректного завершения.

Возможные сбои:
1. Процесс завершился не корректно сам по SIGTERM. Сам плохо всё почистил и завершился. Афрендер уже ничего не киляет.
- Можно сказать что это баг процесса. Надо ругаться разработчикам.
2. Процессу не хватило прав создать сеанс setsid
- Такое бывало на странных системах - можно проверить если запустить всё от рута. А потом тюнить права.
3. Дочерние процессы наоткрывали сеансов ещё.
- Это плохо, лучше так не делать, может есть настройка для этого.
Тимур Хайрулин
CGRU 3.3.1 Ubuntu 22.04LTS, MS Windows 10 (clients only).
Аватара пользователя
AlexeySmolenchuk
Сообщения: 40
Зарегистрирован: Пт июл 14, 2017 10:38 am

Re: Как перехватить Skip рендера?

Сообщение AlexeySmolenchuk »

да, похоже что как раз последний вариант, так как у меня получается утка в зайце, заяц в ларце.

Код: Выделить всё

afrender
    python (env confiration)
        hython (open scene - hrender_af)
            hick (экспорт архива и рендер в отдельном процессе через Popen)
Аватара пользователя
Timur
Site Admin
Сообщения: 178
Зарегистрирован: Вс июл 09, 2017 4:59 pm
Откуда: Королёв
Контактная информация:

Re: Как перехватить Skip рендера?

Сообщение Timur »

Дочерние процессы могут открывать ещё дочерние процессы, те ещё и так далее, лишь бы в одном сеансе осталось всё.
Надо чтобы дочерние не вызывали setsid и setpgrp.
Тимур Хайрулин
CGRU 3.3.1 Ubuntu 22.04LTS, MS Windows 10 (clients only).
Аватара пользователя
Timur
Site Admin
Сообщения: 178
Зарегистрирован: Вс июл 09, 2017 4:59 pm
Откуда: Королёв
Контактная информация:

Re: Как перехватить Skip рендера?

Сообщение Timur »

Конечно если сами что-то пишете, то скорее всего не на Си, а на питоне или баше.
Надо смотреть в каких случаях Popen может создавать новую группу.
В баше тоже стараться не использовать su, sudo.
В общем надо копать, создал ли кто-то новую группу, если да, то кто, когда и зачем.
Тимур Хайрулин
CGRU 3.3.1 Ubuntu 22.04LTS, MS Windows 10 (clients only).
Ответить