Как ограничить число одновременно запущенных экземпляров ПО на Linux, например не более N?

Для согласованно запускаемых экземпляров можно использовать N lock-файлов: процесс неблокирующе захватывает один свободный слот и удерживает дескриптор до завершения.

Короткий ответ

Что ответить на собеседовании

Для согласованно запускаемых экземпляров можно использовать 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее