近期优化一个 shell 脚本,通过 shell 多进程并发极大提升了效率,抽象出核心代码记录一下

一些注意点,直接注释在代码中,有什么疑问可以评论沟通 :)

#!/bin/bash

# 运行方式
# bash test.sh

# 查看多进程,运行的过程
# watch -d -n 1 'ps aux | grep test.sh | grep -v grep'

date
pid=$$

# 多进程并发处理
for i in `seq 1 5` # 迭代 5 次,模拟 5 个并发子进程
do
{
    echo 'hello ' >/dev/null # 业务逻辑
    echo $? >>/dev/shm/${pid}"status"${i} # 处理结果保存在 /dev/shm 共享内存(即 tmpfs),基于内存的临时文件系统
    sleep 3
} &  # & 语句丢到后台,继续下个迭代,实现并发
done
wait # 等待所有后台子进程结束

# 串行检测,多进程处理结果
flag="success"
for i in `seq 1 5`
do
{
    if [[ `cat /dev/shm/${pid}"status"${i}` -ne 0 ]]; then
        flag="have fail"
    fi
}
done

echo $flag
date