Подскажите плз решение такой проблемы:
Есть два процесса (1) и (2). Процесс (2) шлет процессу (1) сигналы,
скажем SIGUSR1. Частота посылок сигналов непредсказуема и постоянно
изменяется. Процесс (1) по приему сигнала от (2) начинает некую обработку,
время которой все время разное, но, в среднем, большее, чем частота посылок
сигнала процессом (2).
Проблема в том, что обработка должна просходить в хэндлере сигнала,
а тогда получается, что если она затянулась, то некоторое количество
посылаемых (2) сигналов будет потеряно, т.к. этот сигнал в хэндлере
блокируется на время выполнения. Причем я проверил это на простом
примере и это действительно так.
Вопрос в том, где я плохо читал маны, и какие решения будут самые прямые
в это случае? Форк не катит, т.к. слишком дорогая по времени процедура
получается.
** WBR, Alex Zakirov. (2:5029/5, frank@rcs.ru)
...Проблемы негров не е$#т белых шерифов (c)
--- tin-1.3.unoff.beta-golded-mode
* Origin: HellBell Station. Powered by FreeBSD. (2:5029/5.38@fidonet)
> Подскажите плз решение такой проблемы:
> Есть два процесса (1) и (2). Процесс (2) шлет процессу (1) сигналы,
> скажем SIGUSR1. Частота посылок сигналов непредсказуема и постоянно
> изменяется. Процесс (1) по приему сигнала от (2) начинает некую обработку,
> время которой все время разное, но, в среднем, большее, чем частота посылок
> сигнала процессом (2).
>
> Проблема в том, что обработка должна просходить в хэндлере сигнала,
> а тогда получается, что если она затянулась, то некоторое количество
> посылаемых (2) сигналов будет потеряно, т.к. этот сигнал в хэндлере
> блокируется на время выполнения. Причем я проверил это на простом
> примере и это действительно так.
Сигналы на такое не pассчитаны. Пpименяй unix sockets или message queues
(из IPC - msgget() и пp.)