首页 > 其他 > 详细

bash谜

时间:2015-10-01 21:51:59      阅读:215      评论:0      收藏:0      [点我收藏+]

这是一个普通的bash脚本 0.sh,它做一件耗时的工作(do_sth),希望调用 0.sh 时不要阻塞

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth &
  echo do sth in background ...
}

main

shell环境执行 0.sh 会马上返回,它把do_sth的任务放后台执行了

但如果这样

./0.sh | cat

发现竟然是阻塞的

于是在9行重定向的输出,1.sh | cat 时就不阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main

但是在最后一行 main 后面重定向以后 2.sh | cat 又阻塞了

#!/bin/bash
do_sth()
{
  sleep 3
}

main()
{
  do_sth >/dev/null &
  echo do sth in background ...
}

main >/dev/null

琢磨了很久, 原来这次阻塞正式阻塞在 main 重定向这里

bash谜

原文:http://my.oschina.net/2bit/blog/513124

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!