У меня есть вопрос о Моните.
Я написал многопоточный процесс 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 других потоков), но он меняется после перезагрузки
Большое спасибо за ваше терпение
Мониторинг основного процесса и пусть основной процесс контролирует потоки. (Самый простой способ)
Вы можете использовать pidfile (man 3 pidfile) для управления pid-файлами в Linux / BSD. Вы можете использовать getpid (), чтобы получить PID текущего процесса и записать его в файл. Следите за этим файлом с помощью Monit. Вы можете реализовать сторожевые механизмы для ваших потоков и / или использовать обработчики сигналов (внутри вашей программы).
Механизм наблюдения может быть переменной, увеличенной потоком в данном интервале. Основной процесс проверяет, была ли переменная увеличена в этом интервале или нет. (требуется блокировка, возможная тупиковая ситуация, если поток зависает при увеличении).
Если вы хотите проверить, работает ли std :: thread, проверьте ответ здесь: Как проверить, работает ли std :: thread?