我正在嘗試撰寫一個腳本,我們稱之為 pippo.R。pippo.R 的目標是在 for 回圈中運行另一個腳本 (for.sh),并使用兩個值進行并行化: nPerm= 必須運行腳本的總次數 permAtTime= 可以同時運行的腳本數. 要做的一件非常重要的事情是等待每個回圈結束,這就是為什么我添加了一個存盤所有 PID 的檔案,然后我使用等待函式來等待每個回圈。該腳本的主要問題是以下錯誤:
./wait.sh: line 2: wait: pid 836844 is not a child of this shell
為了重現性,您可以將以下檔案放入檔案夾中:pippo.R
nPerm=10
permAtTime=2
cycles=nPerm/permAtTime
for(i in 1:cycles){
d=1
system(paste("./for.sh ", i," ",permAtTime,sep=""))
}
for.sh
#!/bin/bash
for X in $(seq $1)
do
nohup ./script.sh $(($X ($2 -1)*$1 )) &
echo $! >> ./save_pid.txt
done
./wait.sh
等待.sh
#!/bin/bash
while read p; do wait $p; done < ./save_pid.txt
運行 Rscript pippo.R 你會得到解釋的錯誤。我知道有一個并行函式可以幫助我,但由于幾個原因我不能使用那個包。謝謝
uj5u.com熱心網友回復:
您不需要跟蹤 PID,因為如果您在wait沒有任何引數的情況下呼叫,腳本將等待所有子行程完成。
#!/bin/bash
for X in $(seq $1)
do
nohup ./script.sh $(($X ($2 -1)*$1 )) &
done
wait
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449533.html
上一篇:UITableViewCustomCell重用(CustomCell中的ImageView)
下一篇:在腳本中將環境變數設定為命令
