Из руководства:
EACCES A semaphore set exists for key, but the calling process does not have permission to
access the set, and does not have the CAP_IPC_OWNER capability.
В качестве напоминания, поскольку семафор является системным объектом, он удаляется только в том случае, если для этого явно выполнен системный вызов.(semctl
с командой IPC_RMID
или ipcrm
term).Кроме того, semkey
должен быть уникальным (например, извлекаться из функции ftok()
), или возможно, что другая программа создала его до вашего первого вызова semget
.Поскольку он существует, вы бы поймали так называемую ошибку EACCES
, поскольку не все программы используют разрешение 0666 для семафора, как вы.
Перезагрузка сбрасывает пул общих объектов (семафор, сегменты общей памяти,очередь сообщений) как бы:
#!/bin/bash
for i in `ipcs -s | cut -f 2 -d ' '`
do
ipcrm -s $i
done
for i in `ipcs -m | cut -f 2 -d ' '`
do
ipcrm -m $i
done
for i in `ipcs -q | cut -f 2 -d ' '`
do
ipcrm -q $i
done