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