On Sun, Sep 07, 2003 at 06:01:36PM +0300, Denis Ovsienko wrote: > > Это не работает. Точнее говоря, приведённый тест не имеет никакого > > отношения к обсуждаемой задаче. > Работает. Имеет. Либо задача решается не теми средствами. На самом деле задача формулируется так: гарантировать освобождение ресурсов по окончании сборки. Другими словами, на клиента рассчитывать нельзя. > > Короче говоря, IPC_RMID сразу уничтожает ресурс. Ни о какой уборке мусора > > не может быть и речи. Все остальные процессы, обращающиеся к этому > > ресурсу, получают (в лучшем случае) ошибку EIDRM. > Это не так, и даже из лога сессии это видно. Установка флага SHM_DEST не > мешает другим процессам вызывать shmat(), я это проверял практически. И не > уничтожает ресурс, пока счётчик присоединённых процессов больше нуля. Как всегда, истина где-то посередине. То, что работает с shm, не работает с sem и msg. Вот пример того, что происходит с очередями: [user@localhost user]$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages [user@localhost user]$ ./msgtest & [1] 32040 [user@localhost user]$ ./msgtest & [2] 32041 [user@localhost user]$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x01070367 3866624 user 600 0 0 [user@localhost user]$ ./msgtest rm [user@localhost user]$ ./msgtest: msgsnd: Invalid argument [2]+ Exit 1 ./msgtest ./msgtest: msgsnd: Invalid argument [1]- Exit 1 ./msgtest ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages P.S. fakeroot использует только sem и msg. -- ldv