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

Тип IPCforkexec_exit
Неименованные и именованные каналыПорожденный процесс получает копии всех дескрипторов родительского процессаВсе открытые дескрипторы остаются открытыми, если для них не установлен бит FD_CLOEXECВсе открытые дескрипторы закрываются, данные из программного канала и FIFO удаляются после последнего закрытия
Очереди сообщений PosixПорожденный процесс получает копии всех открытых родительских процессовВсе открытые дескрипторы очередей сообщений закрываютсяВсе открытые дескрипторы очередей сообщений закрываются
Очереди сообщений System VНе действуетНе действуетНе действует
Взаимные исключения и условные переменные PosixОбщий доступ, если используется разделяемая память с атрибутом разделения между процессамиИсчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения