初めて呼び出された後に EXIT トラップによって呼び出される必要がある bash 関数があります。関数は、関数が終了するとすぐにトラップを起動するように再度設定します。
echo 0 > .i
function launchNextExperiment
{
( # Run in nested subshell
# Implement a mutex lock, not shown
j=`cat .i`
if [ $j -lt $k ]
then
trap launchNextExperiment EXIT # set trap for this nested subshell
./doStuff &
let j=j+1
echo $j > .i # variables are not known in outer shell, therefore use
# the file .i as a counter
fi
wait # wait for doStuff to return from background before exiting
# from this nested shell and causing an EXIT signal
)
}
launchNextExperiment &
私が抱えている問題は、トラップが 1 回しか実行されない、つまりdoStuff
2 回しか実行されないことです。
単純な for ループを使用しない理由は、CPU のサブセットごとに関数doStuff
k
を実際に 1 回呼び出し、処理が非常に多いため、一度に 1 つのインスタンスのみを CPU で実行したいからです。集中的な。それが私がミューテックスロックを持っている理由でもあります。次に、のインスタンスが返されるとすぐに、次のインスタンスを起動したいと思います(実際、それらはすべて異なるシミュレーションです)。launchNextExperiment
doStuff
doStuff
k
doStuff
ネストされたサブシェルごとにトラップが設定され、最終的launchNextExperiment
に実行回数がCPU ごとk
に 1 つだけであることを確認するにはどうすればよいですか?doStuff