1
我有一個調用的bash函數必須在第一次被調用後由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 &
,我的問題是,這種過濾器僅觸發一次,換句話說doStuff
只執行了兩次。
爲什麼我不能用一個簡單的循環來doStuff
k
倍的原因是,我竟然叫launchNextExperiment
函數一次我的每個CPU的一個子集,而只想要doStuff
一個實例,一個CPU上運行因爲它的處理密集程度很高。這也是爲什麼我有一個互斥鎖。然後,只要doStuff
的實例返回,我想要啓動 doStuff
(實際上它們都是不同的模擬)的下一個k
實例。
如何確保陷阱設置爲每個嵌套的子shell,並且最後launchNextExperiment
執行的是k
次,但每個CPU只執行一次doStuff
?
出口俘獲是清理任務,而不是爲程序邏輯。 – ceving 2017-04-12 11:03:27