0

我正在尝试这样,但肯定它是可以改进的,因为 bash 由于某种原因无法完成......

  #!/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

非常感谢!

更新:

我试过这样: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 està

但最终吐出:

nohup: 将输出附加到nohup.out' nohup: nohup: appending output tonohup.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':没有这样的文件或目录致命错误:无法删除临时模块文件'cellconst.mod0':没有这样的文件或目录致命错误:无法删除临时模块文件'cellconst.mod0':没有这样的文件或目录致命错误:无法删除临时模块文件'cellconst.mod0':没有这样的文件或目录致命错误:无法删除临时模块文件' d2q9const.mod0':没有这样的文件或目录

._·

4

3 回答 3

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
于 2012-08-01T10:06:44.907 回答
1

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

于 2012-08-01T10:06:20.063 回答
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,以便扩展给出等待的参数列表

于 2012-08-01T10:13:23.800 回答