欢迎光临
我们一直在努力

Linux Shell多进程并发

核心原理

  • &:将命令放到后台执行,Shell 不等待它结束,立即返回。

  • wait:等待所有后台任务结束。

  • ( … ) &:用子 shell 包装一组命令,然后后台执行。

shell的元字符&提供了在后台运行不需要键盘输入的程序的方法。输入命令后,其后紧跟&字符,该命令就会被送往到linux后台执行,而终端又可以继续输入下一个命令了。

1. 简单并发

sh a.sh & sh b.sh & sh c.sh &

这三个命令就会被同时送往linux后台执行,在这个程度上,认为这三个命令并发执行了。

shell脚本里实现并发操作技能点

  • for循环

  • &后台运行符

  • wait等待所有子进程结束

  • 2. 批量 ping 并发

    for ip in 192.168.56.{1..254}
    do
    (
    ping $ip -c 4 &>/dev/null
    if [ $? -eq 0 ]; then
    echo $ip is alive
    fi
    ) &
    done
    wait

    这会导致 254 个进程同时 ping,可能会触发系统限制或网络拥塞。

    wait等待所有后台子程序执行完毕

    3.分批并发(您贴的最后一个例子)

    只让for循环中某条指令多进程执行

    for ((i=0; i<$cishu; i++))
    do
    start_num=$(expr $i \\* $rsnum + $i)
    end_num=$(expr $start_num + $rsnum)
    for j in `seq $start_num $end_num`
    do
    create_dir $j &
    done
    wait # 等这一批全部完成,再进入下一批
    done

    这是 “分批串行 + 组内并发” 模式。

    更简单的并发数控制(使用 xargs 或 parallel)

    # 使用 xargs(系统自带,轻量)
    seq 1 254 | xargs -I {} -P 10 ping -c 1 192.168.56.{} &>/dev/null && echo "{} is alive"

    # 使用 GNU parallel(需要安装)
    parallel -j 10 'ping -c 1 192.168.56.{} &>/dev/null && echo {} is alive' ::: {1..254}

    性能监控与优化

    在并发执行时,可以监控系统资源使用情况:

    # 查看CPU使用情况
    top -b -n 1 | head -n 12

    # 查看内存使用情况
    free -m

    # 查看磁盘I/O
    iostat -x 1 3

    根据监控结果动态调整并发进程数量,以获得最佳性能。

    参考资料

    Linux Shell多进程并发以及并发数控制 – 简书

    bash shell实现并发多进程操作_bash 多进程并发_低调小一的博客-CSDN博客

    赞(0)
    未经允许不得转载:171主机测评 » Linux Shell多进程并发
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址