пт, 29 сент. 2023 г. в 12:37, Eugene Berdnikov <b...@protva.ru>:

>  Потому как любое
>  действие, затрагивающее libc, грозит разносом стэка, и вообще во время
>  обработки сигнала сплошь минные поля. А когда из сигхэндлера вернулся,
>  нужно как-то мониторить тот факт, что тебе пришёл сигнал, т.е. рядом
>  с poll/select будет ещё вычитывание той переменной, с флагом.


Это тоже не совсем так. Во-первых, man 7 signal-safety содержит список
async signal safe функций, которые можно дергать из обработчика сигнала.
Во-вторых, трюк с глобальным флагом - он так себе, обычно либо в пайп
писали из обработчика сигнала, который ждали на том самом select'е (и тогда
вопрос: нахрена танцы с сигналами, если сразу можно писать в socket?), либо
в sem_post делали, который можно делать из обработчкика, но semaphore по
старой доброй UNIX-традиции - это либо файл, либо процесс (нет), поэтому
его никак не должаться в select/poll.

-
With best regards
  Maksim Dmitrichenko

Ответить