这是一个普通的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 重定向这里
时间: 2024-12-06 16:05:08