2012-08-01 99 views
0

我想这样的,但肯定是改善的,因为在bash不能完成出于某种原因...如何正确同时执行多个f90代码?

#!/bash/bin 

    cd directory 
    gfortran -O3 code1.f90 -o a1.out 
    gfortran -O3 code2.f90 -o a2.out 
    gfortran -O3 code3.f90 -o a3.out 
    gfortran -O3 code4.f90 -o a4.out 
    gfortran -O3 code5.f90 -o a5.out 
    gfortran -O3 code6.f90 -o a6.out 

    ./a1.out & ./a2.out & ./a3.out & ./a4.out & ./a5.out & ./a6.out 

    echo fin 

非常感谢!

UPDATE:

我想是这样的: CD BC_EQ

nohup sh -c "gfortran -O3 -fopenmp LBM_Re100_N150_Ma01_BC_Eq.f90 -o a1.out && ./a1.out " & 
    nohup sh -c "gfortran -O3 -fopenmp LBM_Re100_N150_Ma015_BC_Eq.f90 -o a2.out && ./a2.out " & 
    nohup sh -c "gfortran -O3 -fopenmp LBM_Re100_N150_Ma02_BC_Eq.f90 -o a3.out && ./a3.out " & 
    nohup sh -c "gfortran -O3 -fopenmp LBM_Re125_N150_Ma01_BC_Eq.f90 -o a4.out && ./a4.out " & 
    nohup sh -c "gfortran -O3 -fopenmp LBM_Re125_N150_Ma015_BC_Eq.f90 -o a5.out && ./a5.out " & 
    nohup sh -c "gfortran -O3 -fopenmp LBM_Re125_N150_Ma02_BC_Eq.f90 -o a6.out && ./a6.out " & 

回声JA ESTA

但最终吐出:

的nohup:追加输出到nohup.out' nohup: nohup: appending output to的nohup.out” 将输出附加到`nohup.out'

6个代码中只有4个正在执行,并且他们不会在屏幕上吐出任何东西。

然后,如果我尝试只是:

#!/bash/bin 

    cd BC_EQ 

    gfortran -O3 -fopenmp LBM_Re100_N150_Ma01_BC_Eq.f90 -o a1.out && ./a1.out & 
    gfortran -O3 -fopenmp LBM_Re100_N150_Ma015_BC_Eq.f90 -o a2.out && ./a2.out & 
    gfortran -O3 -fopenmp LBM_Re100_N150_Ma02_BC_Eq.f90 -o a3.out && ./a3.out & 
    gfortran -O3 -fopenmp LBM_Re125_N150_Ma01_BC_Eq.f90 -o a4.out && ./a4.out & 
    gfortran -O3 -fopenmp LBM_Re125_N150_Ma015_BC_Eq.f90 -o a5.out && ./a5.out & 
    gfortran -O3 -fopenmp LBM_Re125_N150_Ma02_BC_Eq.f90 -o a6.out && ./a6.out 

    echo ja està 

它说的错误: 致命错误:无法删除临时模块文件“cellconst.mod0”:没有这样的文件或目录 致命错误:” t删除临时模块文件'cellconst.mod0':没有这样的文件或目录 致命错误:无法删除临时模块文件'cellconst.mod0':没有这样的文件或目录 致命错误:无法删除临时模块文件' cellconst.mod0':没有这样的文件或目录 致命错误:无法删除临时模块文件'd2q9const.mod0':没有这样的文件或目录

._·

+0

可能重复的[在bash运行FORTRAN块和取消所有作业在酮](HTTP:/ /堆栈溢出。com/questions/11756343/run-fortran-block-in-bash-and-cancel-all-jobs-in-one) – 2012-08-01 10:14:26

+0

是的,我将取消另一个帖子,因为它没有得到很好的解释 – APuig 2012-08-01 10:19:47

+0

你也应该了解''批处理','at'和可能的'crontab'命令 – 2012-08-01 10:47:38

回答

1

在最后一个a6.out后面添加&符号。

1

问题在于,您必须在每个要在后台运行的命令之后添加amersand。这意味着在a6之后还有:./a6.out &

但我会用for来使自动化过程中一点点建议你:

for i in {1..6} 
do 
    nohup ./a$i.out & 
done 

而且可以使并行编译也:

for i in {1..6} 
do 
    nohup sh -c "gfortran -O3 code$i.f90 -o a$i.out && ./a$i.out" & 
done 
+0

可能想要做同样的重复gfortran调用 – 2012-08-01 10:08:46

+0

@BrianAgnew:已经添加:)但无论如何感谢 – 2012-08-01 10:11:46

+0

试试你的答案:我发现这个错误: – APuig 2012-08-01 13:55:57

0

试试这个:

./a1.out & 
PIDS=$! 
./a2.out & 
PIDS="$PIDS "$! 
./a3.out & 
PIDS="$PIDS "$! 
./a4.out & 
PIDS="$PIDS "$! 
./a5.out & 
PIDS="$PIDS "$! 
./a6.out & 
PIDS="$PIDS "$! 

wait $PIDS 

更新:

$! :man bash/Special Parameters:扩展为最近执行的后台(异步)命令的进程ID。

PIDS是将包含由空间分离的过程ID的变量,以便扩展给出的参数列表等的

+0

而且看起来你的选择有效! – APuig 2012-08-01 14:20:29