近期优化一个 shell 脚本,通过 shell 多进程并发极大提升了效率,抽象出核心代码记录一下
一些注意点,直接注释在代码中,有什么疑问可以评论沟通 :)
代码语言:javascript复制#!/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