Возникла необходимость использовать fork() и несколько процессов вместо
потоков. Никогда не имел с этим дела; когда я работал с потоками, можно
было использовать блокировки и глобальные переменные для того, чтобы
потоки общались, а тут такого нет. Мне нужно, чтобы один процесс ждал
сообщение от другого, а, получив его, выполнял работу и снова засыпал.
В интернете нашел несколько способов: через ipc, через сокеты. Первый
способ, если я правильно понимаю, работает только на linux.
Вопрос в том, какой, собственно, способ лучше выбрать для моей задачи.
самый простой способ общения между родителем и ребенком, или между потомками одного родителя -- родитель создает пару безымянных пайпов (man 2 pipe) перед форком, ребенок наследует их, и они общаются.
> Мне нужно, чтобы один процесс ждал
сообщение от другого, а, получив его, выполнял работу и снова засыпал.
> А если у процессов разные права, нормально будут общаться?
в стандартной модели юникса -- да. Пайпы уже созданы, дескрипторы на них открыты, их можно юзать пока не закрыл дескрипторы, даже если меняешь uid. Права проверяются только при открытии, а если дескриптор уже открыт, то не проверяются.
Может мьютексы спасут? в родителе поднимаешь мьютекс, запускаешь чилд, в котором блокируешься на этот мьютекс, как только родитель его отпускает, чилд выполняет свою работу. если что-то передать нужно, то разделяемой памятью можно обзавестись.