shell执行_shell多进程执行

shell在linux中,是用户和kernel沟通的桥梁,采用C编写,既是一种命令语言,也是一种解释型脚本语言,我们常写的ls,grep就是基本的shell命令。

shell脚本是将要执行的命令按一定顺序写成的一个文本文件,最近遇到一个需求,要将一定数量的命令快速执行,而每次执行都需要一定的时间,最终使用 &提交后台执行来完成,如:

cat test.txt | grep abc > abc.txt &   #将test.txt所有包含abc的行提取到abc.txt中

多个处理都这样来做,即可完成多进程并行执行,下面先来看串行执行的逻辑

1.串行执行

#!/bin/bash
for i in `seq 1 10`
do
    echo $i
    sleep 1
done

执行后每隔一秒执行一次,大概10s执行完成。

4933dde9790d95ccd8f58d1b4ad608f0.png

2.并行执行

执行语句后加上 &即可提交后台进程执行

#!/bin/bash
for i in `seq 1 10`
do
{
    echo $i;
    sleep 1
} &
done
wait
echo "等待所有进程执行完成"

并行执行,1s左右即可完成

如果希望串行与并行同时存在,可按如下方式采用两层for循环进行:

#!/bin/bash
for i in `seq 1 10`
do
    for j in `seq 1 5`
    do
    {
        echo $i $j
        sleep 1
    } &
    done
    wait
    echo "等待所有进程执行完成, $i"
done

3.标准输出与标准错误不输出到屏幕

如果返回的内容过多,可以在执行语句之后加上1>/dev/null 2>/dev/null将标准输出与标准错误输到黑洞

for i in `seq 1 10`
do
    for j in `seq 1 5`
    do
    {
        echo $i $j
        sleep 1
    } 1>/dev/null 2>/dev/null &
    done
    wait
    echo "等待所有进程执行完成, round $i"
done

65c19c08bc97cdc384e36e0522674cd9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值