IPC: Общая память уничтожила уведомление о процессе

На сегодняшний день можно главным образом забыть о SA_INTERRUPT флаг.
Промежуточные 2.6.18 и 2.6.24 это был просто помощник миграции для нового IRQF_DISABLED флаг.
2.6.24 удалил все SA_* флаги и замененный их IRQF_* флаги.
2.6.35 отметил этот "новый" флаг, как удерживается от использования.

Если у Вас будет ядро прежде 2.6.18, то Вы будете, вероятно, не использовать его (см. ответ Justin).

Сегодняшнее использование IRQF_DISABLE отличается среди архитектуры. x86 все еще только использует его для строго ограниченных во времени функций (time.c, hpet.c) и некоторые xen материал.

Относительно различия; нормальное прерывание может быть прервано другим прерыванием (вытеснение), "быстрое", с другой стороны, не может.

3
31.01.2012, 18:33
2 ответа

Единственным путем Вы могли обработать, это должно будет иметь некоторую систему heartbeat между процессами. Например, первый процесс мог совместно использовать свой PID в общей памяти.

Последующие процессы могли объявить о себе путем отправки сигнала, такого как SIGUSR1. Затем они могли продолжать отправлять SIGUSR2 с промежутками как heartbeat. Два сигнала SIGUSR2 пропавших без вести подряд сказали бы Вам, что процесс умер. Необходимо было бы использовать sigqueue (2) sigaction (2) для передачи PID отправителя сигнала для этого для работы.

Иначе должен принять меры, чтобы другие процессы совместного использования были детьми первого процесса, который получит доступ к общей памяти. Затем смерть ребенка приводит к автоматическому SIGCHLD к родителю. Даже если Вам в настоящее время запускали процессы совместного использования независимо, Вы могли бы изменить их для передачи сигналов о первом процессе, что новый процесс хочет совместно использовать память. Затем первый процесс мог разветвить нового ребенка для принятия действия процесса, который хочет совместно использовать память, таким образом сохраняя родительские/дочерние отношения.

Лично, я сначала посмотрел бы на более современный метод IPC, такой как 0MQ (пойдите сюда и прочитайте руководство), прежде чем я попытался бы реализовать это с сервисами ядра UNIX. Я даже разочаровался бы в общей памяти и кэш-памяти использования для совместного использования данных. На самом деле я реализовал систему с несколькими процессами с помощью 0MQ для heartbeat и IPC и совместно использовав память через кэш-память.

1
27.01.2020, 21:32

Это не. Процессы могут присоединить и отсоединиться к сегменту общей памяти в любое время, и никакое уведомление не дано другим приложенным процессам (если даже существует кто-либо).

0
27.01.2020, 21:32

Теги

Похожие вопросы