UNIX: взаимодействие процессов | страница 11
(He определен) | Обязателен | |
Двери (doors) | (He определен) | (Не определен) |
Удаленный вызов процедур Sun | (He определен) | (Не определен) |
Отображение памяти mmap | _POSIX_MAPPED_FILES или POSIX_SHARED_MEMORY_OBJECTS | Обязателен |
Сигналы реального времени (realtime signals) | _POSIX_REALTIME_SIGNALS | _XOPEN_REALTIME |
1.5. Действие команд fork, exec и exit на объекты IPC
Нам нужно достичь понимания действия функций fork, exec и _exit на различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функцией exit). Информация по этому вопросу сведена в табл. 1.4.
Большинство функций описаны далее в тексте книги, но здесь нужно сделать несколько замечаний. Во-первых, вызов fork из многопоточного процесса (multithreaded process) приводит к беспорядку в безымянных переменных синхронизации (взаимных исключениях, условных переменных, блокировках и семафорах, хранящихся в памяти). Раздел 6.1 книги [3] содержит необходимые детали. Мы просто отметим в добавление к таблице, что если эти переменные хранятся в памяти с общим доступом и создаются с атрибутом общего доступа для процессов, они будут доступны любому процессу, который может обращаться к этой области памяти. Во-вторых, три формы IPC System V не могут быть открыты или закрыты. Из листинга 6.6 и упражнений 11.1 и 14.1 видно, что все, что нужно знать, чтобы получить доступ к этим трем формам IPC, — это идентификатор. Поэтому они доступны всем процессам, которым известен этот идентификатор, хотя для семафоров и памяти с общим доступом требуется некая особая обработка.
Таблица 1.4. Действие fork, exec и _exit на IPC
Тип IPC | fork | exec | _exit |
---|---|---|---|
Неименованные и именованные каналы | Порожденный процесс получает копии всех дескрипторов родительского процесса | Все открытые дескрипторы остаются открытыми, если для них не установлен бит FD_CLOEXEC | Все открытые дескрипторы закрываются, данные из программного канала и FIFO удаляются после последнего закрытия |
Очереди сообщений Posix | Порожденный процесс получает копии всех открытых родительских процессов | Все открытые дескрипторы очередей сообщений закрываются | Все открытые дескрипторы очередей сообщений закрываются |
Очереди сообщений System V | Не действует | Не действует | Не действует |
Взаимные исключения и условные переменные Posix | Общий доступ, если используется разделяемая память с атрибутом разделения между процессами | Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения |