Для согласованно запускаемых экземпляров можно использовать N lock-файлов: процесс неблокирующе захватывает один свободный слот и удерживает дескриптор до завершения.
Как ограничить число одновременно запущенных экземпляров ПО на Linux, например не более N?
Для согласованно запускаемых экземпляров можно использовать N lock-файлов: процесс неблокирующе захватывает один свободный слот и удерживает дескриптор до завершения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для согласованно запускаемых экземпляров можно использовать N lock-файлов: процесс неблокирующе захватывает один свободный слот и удерживает дескриптор до завершения.
На Linux каждый экземпляр пробует flock(fd, LOCK_EX | LOCK_NB) для слотов 0…N−1. Успех хотя бы одного даёт право работать; если все заняты — запуск отклоняется. Каталог слотов должен быть доверенным и одинаковым для всех участников.
Lock-файлы не удаляйте и не пересоздавайте во время работы: иначе разные процессы могут блокировать разные inode одного имени. Учитывайте наследование дескриптора при fork/exec. Блокировка освобождается после закрытия всех связанных открытых описаний файла, в том числе при обычном завершении процесса.
Проверка через ps и последующий инкремент файла-счётчика неатомарна. Если программы могут игнорировать правила, нужен контролирующий launcher/supervisor, а не добровольный advisory lock.
Источник: man7.org.