@Nulltiton

Как сделать взаимодействие между несколькими процессами?

Хочу наладить взаимодействие между процессами. Для простоты это будет скрипт, где один процесс может вызвать второй и передать информацию и наоборот. Узнал, что это можно реализовать через сокеты, но стало очень интересно, не существует ли какого-нибудь шаблона для подобного взаимодействия или все такие работу сокетов нужно прописывать вручную. Буду благодарен любому совету
  • Вопрос задан
  • 113 просмотров
Решения вопроса 3
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Это называется IPC (inter-process communication). Гуглите IPC + ваш язык программирования, что-то да найдете. Полно библиотек готовых. Есть способы по-производительнее сокетов (всякие отображаемые в память файлы, например), но велосипед тут переизобретать смысла нет, если это только не задание на курсе по программированию.

Еще можно пользоваться потоками ввода-вывода. В зависимости от платформы, при создании процесса вы можете получить дескрипторы входного и выходного потоков порожденного процесса. Туда вы можете писать, как в файл, и читать оттуда, как из файла. А дочерний процесс будет как-бы читать с экрана и выводить туда, как-будто он обычное консольное приложение.
Ответ написан
Комментировать
AshBlade
@AshBlade
Просто хочу быть счастливым
Как уже было сказано - это называется IPC
Если нужно обмениваться данными, то можно использовать техники:
- Сокеты: TCP/IP можно практически везде, Unix-domain - только в unix системах, но будет быстрее
- Сигналы: можно передавать данные вместе с сигналом, но только int/указатель, т.е. вариантов не много
- stdout/stdin: при создании дочернего процесса получить его stdout/stdin потоки и работать с ними
- Каналы: можно создать канал (анонимный или именованный) и общаться через него
- Внешний сервис для общения: какой нибудь RabbitMQ, но это чересчур
- Общая память (Shared Memory): но может не работать во некоторых ЯП
- Общение через файлы: один процесс пишет в файл и по окончании шлет сигнал другому процессу, который этот файл читает
- Memory Mapped File : тот же вариант, что и с файлами, но быстрее и при больших данных можешь словить OOM и большое потребление памяти
- ZeroMQ - это очередь сообщений, которая работает в user-space

Дополнительно надо помнить, что есть ограничения различных платформ, ОС, ЯП и некоторые варианты там работать не будут
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
слать данные из одного процесса в другой процесс можно разными способами.

Можно сокеты - удобный способ, когда вы можете сами придумать что и в каком виде слать, при этом можно связать процессы запущенные на разных хостах.
Можно файловые сокеты - тоже самое, только на одном хосте
Можно через http api, нынче очень популярный из-за простоты реализации
Можно через сторонний сервер (базы данных, брокеры очередей)

Все зависит от того, что за данные, как много, как часто. Из этого смотреть чем будет проще или надежнее реализовать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы