码迷,mamicode.com
首页 > 其他好文 > 详细

bash谜

时间:2015-10-01 21:52:00      阅读:227      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!