linux脚本并行调用函数,shell并行(并发或者叫多进程)执行的陷阱

我常用的并行执行有以下几种方式:

脚本中调用另外的脚本

bash script01.sh &

bash script02.sh &

bash script03.sh &

wait

2.函数并行执行

func_01 &

func_02 &

func_03 &

wait

3.循环体并行执行

for i in {1..50}

do

{

ping 192.168.1.$i -c 3 &>/dev/null

if [ $? = 0 ]; then

echo "[SUCCESS] 192.168.1.$i" is alive.

else

echo "[ERROR] 192.168.1.$i is dead!"

fi

}&

done

wait

注意:如下方式的循环体是无法进行并行执行的

cat svn_exist_files.txt | while read LINE

do

{

pinyin_name=$(svn log $LINE | grep line | head -n1 | cut -d' ' -f3)

echo $LINE $pinyin_name >> final_list.txt

echo 'this is a loop.'

}&

done

wait

echo 'Can this line be printed in the last?'

执行这样的脚本,首先被打印的就是Can this line be printed in the last?这一行,说明这里的wait是没有起到我们想要达到的目的。

可以将cat svn_exist_files.txt | while read LINE改成for i in $(cat svn_exist_files)便可以并行执循环体了,但是要注意svn_exist_files.txt文本中的每一行只有一列,也就是每一行文本不能有空格!

结论:cat xxx | while read LINE 这种循环体是不可以并行执行的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值