shell默认是单进程的,可以用任务后台执行的方式实现进程并行。

实现方式:使用&和wait配合实现shell多进程并行

& 进程后台执行
wait 等待前面的后台任务全部完成才往下执行

下面用两个脚本来模拟普通模式和多进程模式

普通模式

#! //bin/bash
startTime_s=`date +%s`

endTime_s=`date +%s`

for i in $(seq 1 5)
do
        sleep 10
        echo "${i} 进程执行完毕"
done

sumTime=$[ $(date +%s) - $startTime_s ]
echo "Total:$sumTime seconds"

---------------------------------------
结果:
[root@rocket ~]# bash onethread.sh 
1 进程执行完毕
2 进程执行完毕
3 进程执行完毕
4 进程执行完毕
5 进程执行完毕
Total:50 seconds

多进程模式

#! //bin/bash
startTime_s=`date +%s`

endTime_s=`date +%s`

for i in $(seq 1 5)
do
  {
        sleep 10
        echo "${i} 进程执行完毕"
  }&
done

wait
sumTime=$[ $(date +%s) - $startTime_s ]
echo "Total:$sumTime seconds"
----------------------------------------------

结果:
2 进程执行完毕
1 进程执行完毕
3 进程执行完毕
4 进程执行完毕
5 进程执行完毕
Total:10 seconds


运行过程查看进程调用情况
[root@rocket ~]# pstree |grep bash
        |-sshd-+-sshd-+-bash---sleep
        |      |      |-bash-+-grep
        |      |      `-bash---top
        |      `-sshd-+-bash---sleep
        |             |-bash---bash---5*[bash---sleep]
        |             `-bash---top

很明显效率大大提升。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐