Создание очереди сообщений Posix выдает ошибку «Не удается выделить память» после пары выполнений! - PullRequest
0 голосов
/ 12 марта 2011

Я создаю 4 дочерних процесса и связываюсь между собой с помощью очереди сообщений для пары.Мне удается сделать это, но после пары выполнений он выдает ошибку «Не удается выделить память».Я предполагаю, что это вызвано тем, что не удаляет существующие очереди должным образом.Нужно ли закрывать или отменять связь в каждом выполнении дочернего процесса до завершения программы или достаточно закрыть их в родительском процессе.ИЛИ есть ли способ закрыть - отсоедините их в командной строке (оболочке) с помощью некоторых команд.Какие-либо предложения!Мне нужно перезагрузить систему в качестве решения, но это, конечно, требует времени.

Спасибо за помощь !!

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Да, вам нужно вызывать mq_close () в каждом дочернем процессе, иначе очередь не будет удалена.Справка для mq_unlink () гласит:

Если один или несколько процессов открывают очередь сообщений при вызове mq_unlink (), уничтожение очереди сообщений откладывается до тех пор, пока не будут обработаны все ссылки на очередь сообщений.закрыто.Однако вызов mq_unlink () не нужно блокировать, пока все ссылки не будут закрыты;он может вернуться немедленно.

http://pubs.opengroup.org/onlinepubs/007908799/xsh/mq_unlink.html

1 голос
/ 12 марта 2011

Вы можете отсоединить очереди сообщений POSIX либо с помощью C API, либо с помощью оболочки, если вы смонтируете виртуальную файловую систему MQ в соответствии с инструкциями в man mq_overview (что даст вам «каталог» на «диске» (не совсем, конечно), где вы можете использовать такие команды, как ls и rm.

На страницах руководства также обсуждаются соответствующие ограничения, которые блокируют вас от создания новых очередей, когда другие не были должным образом удалены.

...