关于并行执行shell脚本的相关说明

在shell中可以通过使用【{需要并行执行的部分}$】这样的模式实现对某一段脚本进行并行处理。
下面先来看一下一个单线程的程序。

#!/bin/bash

cat test.txt | while line
do
    echo "${line}"
    sleep 5
done

上面这个程序会从test.txt文件中读取内容,通过管道的方式逐一将每行的内容传给line,每一次循环都会先打印每一行的内容,然后休眠5秒。执行的输出如下所示。

在这里插入图片描述
如果使用文首的结构,循环内部被包起来的代码会被移到后台运行,这样就不用等待前面的代码,而可以直接执行后面的代码,代码如下图所示。

#!/bin/bash

cat test.txt | while line
do
    {   
        echo "${line}"
        sleep 5
    } & 
done

执行处理的效果如下图所示。
在这里插入图片描述
不过这样的话,是存在缺陷的,有可能父进程已经执行完毕了,但是子进程还在执行,而且子进程执行结束的顺序也不一定是开始执行的顺序(图中并没有体现出来),如果需要父进程等待子进程结束之后在执行可以使用wait命令,代码如下图所示。

#!/bin/bash

cat test.txt | while line
do
    {   
        echo "${line}"
        sleep 5
    } & 
done
wait
echo "Finished"

这样的话父进程就会等待子进程执行完毕后再执行wait后面的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值