Linux — надзор за многопоточным процессом в C ++ с использованием Monit

У меня есть вопрос о Моните.

Я написал многопоточный процесс C ++. Основной и некоторые потоки, которые он вызывает, критически важны для моего приложения и должны жить в течение неопределенного времени.

include <thread.h>
.......
std::thread Thread_1( );
Thread_1.detach();
std::thread Thread_2();
Thread_2.detach();
std::thread Thread_3();
Thread_3.detach();

Как я могу создать файл .pid для настройки Monit?

Нужно ли контролировать все потоки PID отдельно или достаточно контролировать только основной? если я наберу в своей оболочке

pidof main

Я могу получить PID основного (не PID других потоков), но он меняется после перезагрузки

Большое спасибо за ваше терпение

0

Решение

Мониторинг основного процесса и пусть основной процесс контролирует потоки. (Самый простой способ)

Вы можете использовать pidfile (man 3 pidfile) для управления pid-файлами в Linux / BSD. Вы можете использовать getpid (), чтобы получить PID текущего процесса и записать его в файл. Следите за этим файлом с помощью Monit. Вы можете реализовать сторожевые механизмы для ваших потоков и / или использовать обработчики сигналов (внутри вашей программы).

Механизм наблюдения может быть переменной, увеличенной потоком в данном интервале. Основной процесс проверяет, была ли переменная увеличена в этом интервале или нет. (требуется блокировка, возможная тупиковая ситуация, если поток зависает при увеличении).

Если вы хотите проверить, работает ли std :: thread, проверьте ответ здесь: Как проверить, работает ли std :: thread?

0

Другие решения


По вопросам рекламы [email protected]