Как ограничить фоновые процессы, запускаемые оболочкой C? - PullRequest
2 голосов
/ 14 марта 2012

Я обрабатываю 100 файлов в каталоге с помощью команды process, и, поскольку я хочу, чтобы этот процесс был максимально параллельным. Итак, я запускаю следующие команды в оболочке C, и она прекрасно работает:

foreach F (dir/file*.data)

process $F > $F.processed &

echo $F

end

Все 100 процессов запускаются одновременно в фоновом режиме, максимально используя все мои ядра.

Теперь я хочу использовать только половину своих ядер (2 из 4) одновременно. Есть ли элегантный способ сделать это?

1 Ответ

1 голос
/ 21 марта 2012

Если у вас установлена ​​GNU Parallel http://www.gnu.org/software/parallel/, вы можете сделать это:

parallel -j 50% 'process {} > {}.processed; echo {}' ::: dir/file*.data

Вы можете установить GNU Parallel просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Смотреть видео вступлениядля GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

...