LINUX.ORG.RU

Про процессы в общем


0

0

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

Сообщение - строка.

ttnl ★★★★★
() автор топика

можно попробовать сделать через очереди сообщений

Alirp
()

самый простой способ общения между родителем и ребенком, или между потомками одного родителя -- родитель создает пару безымянных пайпов (man 2 pipe) перед форком, ребенок наследует их, и они общаются.

> Мне нужно, чтобы один процесс ждал сообщение от другого, а, получив его, выполнял работу и снова засыпал.

соответствует блокирующему чтению пайпа..

dilmah ★★★★★
()
Ответ на: комментарий от ttnl

ipc - это inter process communication, общий термин.

mv ★★★★★
()
Ответ на: комментарий от ttnl

fork()'нутый чайлд сохраняет uid родителя, насколько я помню. Что будет, если процесс поменяет id в процессе исполнения, я не знаю.

Ну, можно сделать именованную пайпу, mkfifo, и установить ей хорошие права на чтение/запись.

Uncle_Theodore ★★
()
Ответ на: комментарий от ttnl

> А если у процессов разные права, нормально будут общаться?

в стандартной модели юникса -- да. Пайпы уже созданы, дескрипторы на них открыты, их можно юзать пока не закрыл дескрипторы, даже если меняешь uid. Права проверяются только при открытии, а если дескриптор уже открыт, то не проверяются.

dilmah ★★★★★
()

shm_open()/shm_unlink() (для размещения строки) + sigqueue()

rei3er
()

Может мьютексы спасут? в родителе поднимаешь мьютекс, запускаешь чилд, в котором блокируешься на этот мьютекс, как только родитель его отпускает, чилд выполняет свою работу. если что-то передать нужно, то разделяемой памятью можно обзавестись.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.