2012-01-31 3 views
1

В системе общей памяти, когда два процесса совместно используют общую систему памяти, после того, как один процесс будет убит, как другой процесс будет уведомлен об убитом процессе с помощью системы общей памяти?IPC: общая память уничтожена в процессе обработки

ответ

1

Общая память, как следует из названия, является памятью , пассивным объектом. Вам нужно использовать мьютекс, чтобы отслеживать активность другого приложения. Каждое приложение создает свой собственный мьютекс и ждет другого процесса. Если приложение завершено, состояние мьютекса переходит в «Заброшенное».

+0

Большое спасибо Eugene Mayevski 'EldoS. http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html для справки: SIGCHLD 20,17,18 Ign Ребенок остановлен или завершен –

+0

@ mav_2k Если вы говорите об Linux или Unix, возможно, вам придется отразить это, установив соответствующие теги для вашего вопроса. –

1

Один из способов состоит в том, чтобы родительский/управляющий процесс запускал все остальные процессы в качестве детей. Когда любой ребенок умирает, родитель получает SIGCHLD и может обрабатывать очистку разделяемой памяти/ресурсов разумным способом.

PostgreSQL следует за этим шаблоном проектирования с его почтмейстерскими и рабочими процессами.

Обратите внимание, что в большинстве систем Unix мьютексы не будут изменены/разблокированы ОС во время процесса смерти. Семафоры предлагают функцию UNDO, но они, по общему признанию, намного тяжелее, чем мьютексы. YMMV.

+0

Большое спасибо CoreyStup. http://www.kernel.org/doc/man-pages/online/pages/man7/signal.7.html для справки: SIGCHLD 20,17,18 Ign Ребенок остановлен или прекращен –

Смежные вопросы