什么是在shell中并行化多个类似程序实例的最佳方法?

时间:2013-10-25 20:27:13

标签: shell unix testing parallel-processing

我有一个运行测试的程序,它需要很多参数。假设我有调用main.sh的程序test.sh,这是测试程序。在main.sh中,我为test.sh添加了许多不同的参数来运行。只运行一次测试没有问题。

但是,shell允许我使用&同时运行多个实例。我正在考虑使用for循环使用&(后台运行)多次调用此测试,并在循环开始时设置不同的参数。它看起来如下:

#main.sh
for i in 0 1 2 3; do
    value=${param[$i]}
    #test.sh takes "value" as a parameter inside it and run
    . ./test.sh &
done

但是,test.sh通常需要一段时间才能完成,并会多次使用参数值。在这种情况下,当循环继续运行并增加“i”以更改参数值时,test.sh的初始实例将采用不同的参数并且循环继续运行。有没有办法让test.sh以任何程序实例的不变参数值运行?

1 个答案:

答案 0 :(得分:1)

您的子级脚本test.sh将拥有父级环境的副本,因此更改父级中的父级数据不会影响它(只要您运行它作为进程,不是通过点运算符)。你可以用两种方式做到:

  • test.sh
  • 的命令行中传递参数
  • 在开始test.sh
  • 之前导出环境变量

在任何一种情况下,这都不会影响您之前开始的test.sh实例。

更具体地说,试试:

for i in 1 2 3 4; do
    value=${param[$i]}
    ./test.sh $value &    # value is passed as command-line parameter
done