欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell多进程执行

程序员文章站 2022-03-22 13:15:10
...

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执行完成。
shell多进程执行

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

shell多进程执行

相关标签: 工具/插件