Какой простой механизм для синхронных пулированных процессов Unix?

Мне нужно ограничить количество процессов, выполняемых параллельно. Например, я хотел бы выполнить эту команду psuedo:

export POOL_PARALLELISM=4
for i in `seq 100` ; do
    pool foo -bar &
done

pool foo -bar # would not complete until the first 100 finished.

Поэтому несмотря на 101fooЕсли вы поставлены в очередь, только 4 будут работать в любой момент времени.pool выполнит fork () / exit () и поставит в очередь остальные процессы до завершения.

Есть ли простой механизм, чтобы сделать это с помощью инструментов Unix?at а такжеbatch не применяются, потому что они обычно вызывают в последнюю минуту, а также выполнять задания последовательно. Использование очереди не обязательно является лучшим, потому что я хочу, чтобы они были синхронными.

Прежде чем я напишу оболочку C, использующую семафоры и разделяемую память, а затем отлаживаю взаимоблокировки, которые я обязательно введу, кто-нибудь может порекомендовать bash / shell или другой инструментальный механизм для достижения этой цели.

Ответы на вопрос(1)

Ваш ответ на вопрос