2017-02-20 14 views
0

У меня есть программа, которая обрабатывает файлы на самом деле с использованием жесткого диска. Я хочу назвать этот процесс на многих проблемах, и опыт показывает, что производительность является лучшей, когда одновременно запускается не более трех процессов (в противном случае они слишком много конкурируют за использование диска в качестве ресурса и замедляют каждый другой вниз). Есть ли простой способ вызвать команды из списка и начать выполнение нового, когда есть меньше, чем n (3) процессов (запущенных перечисленными командами) одновременно запущены?Как вы можете убедиться, что ровно n проект запущен в bash?

ответ

1

Вы можете использовать xargs. Из the manpage:

--max-procs=max-procs 
-P max-procs 
     Run up to max-procs processes at a time; the default is 1. If 
     max-procs is 0, xargs will run as many processes as possible at 
     a time. Use the -n option with -P; otherwise chances are that 
     only one exec will be done. 

Например, предполагающей ваши команды один за линию:

printf 'sleep %dm\n' 1 2 3 4 5 6 | xargs -L1 -P3 -I {} sh -c {} 

Затем в терминале:

$ pgrep sleep -fa 
11987 sleep 1m 
11988 sleep 2m 
11989 sleep 3m 
$ # a little while later 
$ pgrep sleep -fa 
11988 sleep 2m 
11989 sleep 3m 
12045 sleep 4m 

Опция -L1 использует одну строку в то время, как аргумент, и -I {} указывает, что {} будет заменен этой линией. Чтобы фактически запустить команду, мы передаем ее sh в качестве аргумента для -c.

Смежные вопросы