есть сгенерированная программа, допустим это файл exe. я ее запускаю в отдельном процессе. программа генерируется в райнтайме, и у меня нет возможности проверить, есть ли в ней бесконечные циклы, переполнение стэка и тд. вопрос, мне необходимо периодически общаться с этим процессом, как детектить ситуации когда процесс уже скорее "мертв чем жив"?
Вочдог по ipc?
погуглить про watchdog inter process communication? з.ы. таким ни разу не пользовался, почитаю
Ещё погугли heartbeat
нечто похожее нашел у CICS IPIC, там пара сообщений с периодом в 10 сек отправляется (считай та же самая идея с периодическим пингом)
Я сам подобные системы не делал, только читал про них при подготовке к собесам. Но тут у меня сразу пара идей: 1. Твоя программа периодически пишет что-то в лог-файл с таймстемпом. Сторонний сервис периодически проверяет этот файл. Если последний лог был достаточно давно - значит программа зависла или упала. 2. То же самое, но программа напрямую шлёт сообщения стороннему сервису по ipc. 3. Сторонний сервис пингует твою программу. Твоя программа крутится в ивент-лупе и периодически проверяет пинг запросы, отсылает ответы. Если она по каким-то причинам не может переключиться в ивент-луп и ответить на пинг - она зависла. Тут правда я хз как лучше реализовать ивент-луп и основной поток программы (так чтобы тред ивент-лупа не включался просто так, даже если основной завис). Возможно лучше такое сделать на ручном переключении тредов. Либо реализовать вочдог для тредов внутри твоего процесса
проблема всех методов в том что процесс может пинговаться, только вот исполняет он например бесконечный цикл. в итоге процесс как бы работает, но с другой стороны он уже бесполезен. можно конечно в пинге какую нибудь информацию попробовать собирать о call stack'e, и эвристически обрабатывать такие ситуации
Если процесс "пингуется" в теле бесконечного цикла, то да, такой механизм бесполезен. Но другого решения я не вижу. Пингуйте вне/после цикла.
Обсуждают сегодня