问题:在 shell 下有 A B C D 四个命令,需要先执行 A 再执行 B C 最后执行 D
其中, B C 耗时较多, 但是,互不干扰,可以同步执
子进程 和 wait
./A
./B & # 设为子进程
./C &
wait
./D
wait加参数是等待某个进程结束,不加参数是等待以上所有后台进程结束
例:
主脚本:
#!/bin/bash
#
# 异步执行(wait)使用样例-父脚本
#
echo "父脚本:启动子脚本.."
./async-child &
# 通过将shell参数 $! 赋给pid变量,以记录子进程的进程ID
pid=$!
echo "父脚本:子脚本(PID=${pid})已启动"
echo "父脚本:继续执行中.."
sleep 2
echo "父脚本:暂停执行,等待子脚本执行完毕.."
wait ${pid}
echo "父脚本:子脚本已结束,父脚本继续.."
echo "父脚本:父脚本执行结束。脚本退出!"
子脚本:
#!/bin/bash
#
# 异步执行(wait)使用样例-子脚本
#
echo "子脚本:正在运行.."
sleep 5
echo "子脚本:子脚本结束。脚本退出!"
结果:
[fbap:/home/fbap/usertmp]>./async-parent.sh
父脚本:启动子脚本..
父脚本:子脚本(PID=42620)已启动
父脚本:继续执行中..
子脚本:正在运行..
父脚本:暂停执行,等待子脚本执行完毕..
子脚本:子脚本结束。脚本退出!
父脚本:子脚本已结束,父脚本继续..
父脚本:父脚本执行结束。脚本退出!