2012-05-16 3 views
2

Этот вопрос предназначен для независимого использования языка и соединения. Фактически методы поиска - это вопрос. Я знаю, что я могу напрямую пропустить два процесса через вызов вроде prog1 | prog2 в оболочке, и я кое-что прочитал о RPC и Sockets. Но все было слишком абстрактно, чтобы действительно схватить его. Например, мне не ясно, как создаются сокеты, и если каждый процесс должен создать сокет, или если многие процессы могут использовать один и тот же сокет для передачи сообщений друг другу или я могу полностью избавиться от сокетов.Как независимые процессы, запущенные на одной машине Ubuntu, обмениваются данными друг с другом?

Может ли кто-нибудь объяснить, как Interprocess-Communication в Linux действительно работает и какие у меня варианты?

ответ

2

Труба

В производитель-потребитель сценария, вы можете использовать трубы, что это IPC. Труба - это то, что предлагает название, она соединяет раковину и источник вместе. В оболочке он является стандартным выходом и приемником стандартного ввода, поэтому cmd1 | cmd2 просто подключает вывод cmd1 ко входу cmd2.

Используя трубу, он создает два дескриптора файла. Вы можете использовать его для раковины, а другой для источника. Как только труба будет создана, fork и один процесс используют один из дескрипторов файла, а другой - другой.

Другого IPC

IPCs разнообразен: труба (в памяти), именованный канал (через файл), сокет, разделяемая память, семафоры, очереди сообщений, сигналы и т.д. Все они имеют про и против. В Интернете много книг и книг о них. Описывать их все здесь было бы сложно.

В принципе, вы должны понимать, что каждый процесс имеет свою собственную память, отделенную от других процессов. Поэтому вам нужно найти общие ресурсы, с помощью которых можно обмениваться данными. Ресурс может быть «физическим», например, сетью (для сокета) или массовым хранилищем (для файлов) или «абстрактным», например, трубой или сигналом.

+0

+1. Это довольно полное резюме того, что доступно. – ArjunShankar

+0

Я создал i wiki сообщества, поэтому, если у кого есть время/знания, они могут сделать это еще более подробно :) – Huygens

+0

+1 Отличное резюме. С такими ключевыми словами я могу больше Google. Если вы знаете больше о теме, возможно, у вас также есть ответ на мой вопрос: http://stackoverflow.com/questions/10736396/softwaredevelopment-patterns-for-files-and-caches-as-inter-process -коммуникация – erikbwork

1

Если один из процессов является производителем, а другой - потребителем, то вы можете перейти на обмен с общей памятью. Для этого вам нужен семафор. Один процесс блокирует семафор, а затем записывает в общую память, а другой блокирует семафор и считывает значение. Поскольку вы используете семафор, грязные чтения/записи будут позаботиться.

+0

Процессы не разделяют память. Таким образом, «обмен информацией с памятью» невозможно. – ArjunShankar

+1

Кроме того, «совместное использование памяти» (между потоками одного и того же процесса) не используется только для проблем «производитель-потребитель». – ArjunShankar

+1

Общая память может использоваться для связи между процессами. Пожалуйста, обратитесь к этой ссылке http://www.ibm.com/developerworks/aix/library/au-spunix_sharedmemory/index.html – Raghuram

 Смежные вопросы

  • Нет связанных вопросов^_^