for pid in $(jobs -p); do wait $pid done解决办法是新建一个标志文件,并将子进程返回值保存在另外一个临时文件中,主进程通过标志文件和返回值来获取相关信息,执行其余逻辑。
function doSomething()
{
local retTmp=$(mktemp)
local lock="/tmp/do.lock"
touch $lock
(
real script to do something
echo $? > $retTmp
rm -f $lock;
)&
while [ -f $lock ]; do
sleep 0.1
printf "Please wait... %s \r" $f
let "t=10#$(date +%N) / 100000000 % 4"
case $t in
0) f="/";;
1) f="-";;
2) f="\\";;
3) f="|";;
esac
done
echo
local retcode=$(cat $retTmp)
rm -f $retTmp
return $retcode
}
这种方式类似于通过fork函数实现相关逻辑,感觉上稍微有点笨重,不清楚bash是否有更简便的方式来实现主子进程的信息同步
防止shell脚本长时间运行导致ssh超时,布布扣,bubuko.com
原文:http://blog.csdn.net/napolunyishi/article/details/25147251