SysV message queues

shlyumper

Вот предположим, есть программа на perl, которая делает много раз $mq = IPC::Msg->new(IPC_PRIVATE, S_IRWXU но по некоторым причинам (например, падает) не делает за собой $mq->remove; Через какое-то время новые очереди создаваться, естесвенно, перестают (No space left on device). Как в такой ситуации почиститься без радикальных мер?

sergey_m

Радикально - ipcrm(1).
А вообще у программы надо сделать обработчик выхода, который будет подчищать. Вариантом падения в кору самого perl пренебрежём.

shlyumper

Как failover устроить я понимаю, ситуация сейчас проще: в процессе отладки бывает так, что процесс прибивается без вытирания за собой мусора. С ipcrm какая-то лажа получается, и в чем дело что-то не соображу:

[leo lcgsim]$ ipcs -q

------ Message Queues --------
key msqid owner perms used-bytes messages
0x00000000 32768 shamardin 700 0 0

[leo lcgsim]$ ipcrm -Q 0
ipcrm: illegal key (0)

Другой вопрос из той же области: а можно ли как-то "подцепить" уже созданную IPC_PRIVATE очередь, оставшуюся после такого падения?

Papazyan

С ipcrm какая-то лажа получается, и в чем дело что-то не соображу:
ipcrm -q msqid ?

sergey_m

> С ipcrm какая-то лажа получается
+1 к совету
> Другой вопрос из той же области: а можно ли как-то "подцепить" уже созданную IPC_PRIVATE очередь, оставшуюся после такого падения?
Как-то можно, но как я не знаю. Сам никогда не работал в этой области.

shlyumper

Точно, -q я ночью как-то и проглядел. Спасибо.
Оставить комментарий
Имя или ник:
Комментарий: