我有一个程序,它以非常重要的磁盘使用方式处理文件。我想在许多fies上调用这个过程,并且经验表明性能是最好的,当同时启动的进程不超过3个时(否则它们竞争磁盘使用的资源太多而且速度慢)其他下来)。是否有一种简单的方法可以从列表中调用命令并在少于n(3)个进程(由列出的命令启动)同时运行时开始执行新命令?
答案 0 :(得分: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
。