|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
Watchdog на основе таймеров POSIX29.12.2019, 22:41. Показов 9234. Ответов 65
Метки нет (Все метки)
Добрый день, решил написать watchdog для сервера и чтобы не тратить зазря процессрное время решил реализовать это на основе таймеров POSIX, а не через создание отдельного потока.
Почитал документацию и остались некоторые вопросы: 1)Как должна быть организована проверка что сигнал пришёл от созданного мною таймера, а не от стороннего приложения ? Сечас в обработчик приходит _si->si_pid == 0 2)Как сделать сброс таймера т.е. чтоб начинал считать по новому ? это всётаки watchdog. 3)Как подружить мой watchdog и std::getline(cin, str_command ? 4)Надо ли вызывать предыдущие обработчики если я их не создавал ? 5)Надо ли делать задержку после вызова timer_settime ? 6)Какой тип таймера выбрать ? CLOCK_REALTIME меня смущает что ктото мжет перевести время. код внизу watchdog.cpp
0
|
|||||||||||
| 29.12.2019, 22:41 | |
|
Ответы с готовыми решениями:
65
WatchDog Пробуждение по watchdog WatchDog в Python |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 12:24 | ||
|
Поэтому: Если ваши действия вписываются в список разрешенных действий из обработчика сигнала - используйте таймер на сигналах. В windows придется делать что-то другое. Добавлено через 6 минут _______________ Я бы сделал процесс, с polling`ом timeprfd и pipe. Через pipe оповещаем watchdog о необходимости сброса таймера из обычного контекста выполнения. Для перехвата критических ошибок делаем обработку сигналов, в которой через тот же pipe (запись в pipe из обработчика разрешена) оповещаем watchdog-процесс о необходимости сброса.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 13:29 [ТС] | ||
|
Давайте для начала заглянем сюда: /proc/interrupts с помощью cat /proc/interrupts Лично у меня на нулевом прерывании, не поверите, но такая штука как таймер. Далее, как вы сами согласились ранее таймер это объект ядра. Не счётчик, а именно таймер. Причём объект ядра он и в винде и в линуксе и более того обе оси предоставляют необходимый сервис для того чтобы поюзать этот самый таймер, а значит нет смысла пытаться сделать свой сурогат на отдельном потоке.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 13:40 | ||
|
Вы писали про "кроссплатформенный" таймер. Я вам ответил про кроссплатформенный таймер. Как раз именно потому, что он объект ядра - решение без "суррогатов в отдельном потоке" не будет кроссплатформенным.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 13:44 [ТС] | ||
|
В Qt взяли и сделали таймер. Он вполне себе кроссплатформенный, но Qt шибко толстый, поэтому мой взор обратили на себя posix либы.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 08.01.2020, 13:55 | |||
|
Там тот же самый polling если что, да только не для объекта ядра таймера, а прямо в userspace, на основе таймаута самой функции poll\select. Добавлено через 6 минут Еще раз: решения, эксплуатирующие только один поток могут быть: 1) на основе polling`а (poll\select\epoll, WaitForSingleObject из WinAPI) 2) на основе сигналов. Кроссплатформенные решения с polling`ом есть - asio, Qt. Вы сказали, что поллинг не подходит (почему не подходит - не совсем ясно - есть подозрение, что вы просто не разобрались как их готовить). Дальше я на основе вашего ответа говорю, что тогда для вас остались только сигналы (если не делать второй поток - явно или неявно), для них кроссплатформенного решения - нет. Вопросы?
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 14:12 [ТС] | ||
|
Пришлось писать системные обработчики перехвата клавишь с клавиатуры. Вот у меня щас в основном потоке пользовательский ввод есть через std::cin и никакой поллинг поэтому там невозможен. У меня щас нет винды под рукой чтоб тестировать вариант для винды. да и самм сервисы могут эволюционировать поэтому лучше когда это ответсвенность либы, а не моя. С сигналами в винде непонятно как обстоят дела. Вроде как они должны быть раз уж ввели std::signal, но тайиера там с сигналами не дружат.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 14:16 | ||
|
У меня есть небольшой пример (не для Qt) ка ктакое организуется в принципе. Могу показать, если нужно.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 14:20 [ТС] | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 08.01.2020, 15:06 | |||
|
SEH - может заменить сигналы в вин, но только для критических ошибок. А в UNIX сигналы это нечто большее, чем обработка ошибок. Для сигналов в Win отдельное API, которое опять же завязано на polling. Примеры: https://docs.microsoft.com/ru-... er-objects (поллинг через WaitForSingleObject) https://docs.microsoft.com/ru-... ing-timers (поллинг через очередь событий) Есть еще: https://docs.microsoft.com/en-... (v%3Dvs.85) (в отдельном потоке) Добавлено через 1 минуту
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 08.01.2020, 15:30 [ТС] | |||
|
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||||
| 08.01.2020, 15:57 | |||||||
0
|
|||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 08.01.2020, 17:26 [ТС] | ||
|
https://docs.microsoft.com/en-... procedures https://docs.microsoft.com/en-... dfrom=MSDN Добавлено через 9 минут Хотя нет, вспомнил. Процедуру главного окна надо зарегистрировать прежде она будет вызываться. Так что ваш вариант более изначальный. Добавлено через 1 час 6 минут Но процедура главного окна вызывается операционной системой асинхронно работе основного потока. Скорей всего в основном потоке ненадолго приостанавливая его. И это по сути эквивалент обработчика сигналов. Хотя конечно есть существенные отличия между этими механизмами.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||||
| 08.01.2020, 17:31 | ||||
|
DispatchMessage: https://docs.microsoft.com/en-... tchmessage в этом же цикле.
0
|
||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 08.01.2020, 17:33 | ||
|
Никаких претензий по качеству кода, архитектуре, целостности, работоспособности и т.п. по нему не принимаю
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 08.01.2020, 18:29 [ТС] | |||
Я почемуто был уверен что дело обостоит именно так как я описал. Но я много лет не касался этой темы.Добавлено через 47 минут Но переделывать ничего не буду. Если в винде все таймеры работают только через опрос (polling), значит для винды вотчдога не будет. Смысла не вижу просто.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||||||
| 09.01.2020, 04:00 [ТС] | |||||||||||
|
Может кто нибудь знает почему здесь функция завершается с ошибкой:
0
|
|||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 09.01.2020, 08:42 | |
|
squareroot, я бы посмотрел на полный, компилируемый пример, воспроизводящий эту проблему.
0
|
|
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 09.01.2020, 15:46 [ТС] | |||||||
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 09.01.2020, 16:29 | ||
|
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 09.01.2020, 16:57 [ТС] | ||
Вы не против если я вернусь к этой теме чуть позже ?
0
|
||
| 09.01.2020, 16:57 | |
|
Помогаю со студенческими работами здесь
60
Watchdog из Arduino Внешний WAtchdog AvrSudio и watchdog Analog Watchdog (AWD) Cortex m0 и watchdog таймер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|