2012-08-01 45 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

相關問題