你怎么能确保nash项目正在bash中运行?

时间:2017-02-20 13:09:09

标签: bash asynchronous synchronization synchronous

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

1 个答案:

答案 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