Это выдержка из Advanced Liniux Programming:
Семафоры продолжают существовать даже после завершения всех использующих их процессов.
Последний процесс, использующий набор семафоров, должен явно удалить его, чтобы
в операционной системе не заканчиваются семафоры. Для этого вызовите semctl с
идентификатор семафора, количество семафоров в наборе, IPC_RMID в качестве третьего аргумента,
и любое значение semun союза в качестве четвертого аргумента (который игнорируется).
эффективный идентификатор пользователя вызывающего процесса должен совпадать с идентификатором распределителя семафора
(или звонящий должен быть root). В отличие от сегментов общей памяти, удаление семафора
set приводит к немедленному освобождению Linux.
Если процесс выделяет общую память, и многие процессы используют ее и никогда не устанавливают ее удаление (с помощью shmctl), если все они завершаются, тогда общая страница продолжает оставаться доступной. (Мы можем видеть это с помощью ipcs).
Если какой-то процесс выполнил shmctl, то после отключения последнего процесса система освободит разделяемую память.
Пока все хорошо (думаю, если нет, поправьте меня).
Что я не понимаю из этой цитаты, которую я сделал, так это то, что сначала говорится:
«Семафоры продолжают существовать даже после завершения всех процессов, использующих их».
а потом:
«В отличие от сегментов разделяемой памяти, удаление набора семафоров приводит к немедленному освобождению Linux».