首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在陷阱代码中重新设置bash陷阱?

如何在陷阱代码中重新设置bash陷阱?
EN

Stack Overflow用户
提问于 2010-10-08 20:54:29
回答 1查看 1.1K关注 0票数 1

我有一个被调用的bash函数,它必须在第一次被调用后被出口陷阱调用。该函数再次将陷阱设置为在该函数退出时立即触发。

代码语言:javascript
复制
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时间,是因为我实际上为我的CPU子集中的每一个调用了一次launchNextExperiment函数,并且一次只希望doStuff的一个实例在一个CPU上运行,因为它是非常处理密集型的。这也是我有一个互斥锁的原因。然后,一旦doStuff的一个实例返回,我就想启动doStuff的下一个k实例(实际上,它们都是不同的模拟)。

如何确保为每个嵌套子外壳设置陷阱,并最终执行launchNextExperiment k次,但每个doStuff只执行一次?

EN

回答 1

Stack Overflow用户

发布于 2010-11-14 10:34:33

这不是你的问题的答案,但是你想要完成的事情可以在没有陷阱和subshell的情况下完成:

代码语言:javascript
复制
echo 0>i
k=10
dispatch_work()
{
  mutex_lock
  i=$(<i)
  let i++
  echo $i>i
  mutex_unlock

  if [ $i < $k ]; do
    do_work $i
    dispatch_work
  fi
}

for c in $(seq 1 $cpus); do
  dispatch_work &
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3890646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档