Происходит при помощи системного вызова fork() (или &).
Новый процесс, создаваемый fork(), является полной копией исходного и его контекстом, отличается только по PID. Дочерний процесс с помощью системного вызова exec запускает другую программу, заново инициализируя код и данные. Родительский процесс может синхронизировать своё исполнение с завершением дочернего с помощью системного вызова wait.
Способы взаимодействия
Тип связи
Способ применения
Системные вызовы
разделяемая память
Общий доступ
Высококпроизводительный обмен данными
Shmem
mmap
Переменные окружения
Односторонняя (При запуске операционной системы)
Задание режимов работы
setenv
сигналы
Односторонняя
Уведомления о наступлении события
Signal
Каналы
Односторонняя
Ввод/вывод
Pipe
Сокеты
Двусторонняя
Сетевой обмен
socket
1. Разделяемая память – механизм, с помощью которого 2 процесса средствами ОС могут обращаться к общему участку физической памяти каждый через свое адресное пространство. Взаимодействующие программы должны изначально содержать код с помощью специальных системных вызовов, обозначающие участки адресных пространств для обмена данными. Разделяемая память не содержит встроенных средств синхронизации.
2. Переменные окружения – каждый запускаемый процесс снабжается информационным пространством, которое он может изменять. В нем можно создавать именованные хранилища данных (переменные окружения), содержащие любую текстовую или числовую информацию. При создании процессов родительский может указать, каким из копируемых переменных окружений надо изменить значения.
3. Сигнал – при получении сигнала исполнение процесса приостанавливается и запускается подпрограмма обработчик. Она может быть стандартной, определенной в ОС, или явно определена в исходном тексте исполняемой программы. У сигнала есть единственная характеристика – его номер (целое число).
4. Канал – (Юникс) однонаправленные потоки данных (очереди между процессами). Могут быть неименованные (существуют только вместе с процессом), именованные представленные в файловой системе.
5. Сокет – интерфейс сокета явно разделяет во взаимодействии 2 процессов клиентскую и серверные части. Серверный процесс инициализирует сокет и ждет входящих соединений. Клиентский – устанавливает соединения.
Виды сокетов:
1. Потоковый – сервер и множество клиентов.
2. Датаграмный – позволяет отправлять сообщения короткой длины между привязанными к нему процессами.