Как работает взаимодействие между процессами в Linux
Python
Senior
Билайн
Как работает взаимодействие между процессами в Linux
Ответы
В Linux процессы взаимодействуют через несколько механизмов:
- **Сигналы** - асинхронные уведомления (например, SIGTERM для завершения). Пример:
```
import os, signal
os.kill(pid, signal.SIGTERM) # Отправка сигнала
```
- **Каналы (pipes)** - однонаправленный поток данных:
```
import os
r, w = os.pipe() # Создание канала
```
- **Очереди сообщений** (System V, POSIX) - структурированные сообщения.
- **Разделяемая память** - общий участок памяти между процессами.
- **Сокеты** - сетевой или локальный (Unix domain) обмен данными.
- **Файлы** - простейший способ через файловую систему.
Для Python наиболее удобны:
- `multiprocessing` модуль (очереди, каналы, разделяемая память)
- `subprocess` для запуска дочерних процессов
- `os.pipe()` для низкоуровневых каналов
Пример с `multiprocessing`:
```
from multiprocessing import Process, Queue
def worker(q):
q.put('Hello from child!')
q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get()) # Получаем сообщение
p.join()
```
Все механизмы IPC в Linux используют системные вызовы и требуют синхронизации для избежания race conditions.