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