首页 > 系统服务 > 详细

shell模拟进程池

时间:2020-06-05 14:07:58      阅读:28      评论:0      收藏:0      [点我收藏+]
废话不多说,直接上脚本。下面的脚本可以直接执行看效果
#!/bin/bash

set -e

# 设置并发数
PROC_NUM=10

# 以主进程PID命名管道文件
FIFO_FILE="/tmp/$$.fifo"

# 新建管道文件
mkfifo ${FIFO_FILE}

# 生成文件描述符9指向管道文件;"<"表示可读,">"表示可写
exec 9<>${FIFO_FILE}

# 向文件描述符中写入设置的并发数量的行数,模拟生成进程池;一行就是一个子进程
for process_num in $(seq ${PROC_NUM})
do
          echo "$(date +%F\ %T) Processor-${process_num} Info: " >&9
done

# 按并发数设置执行任务
for n in $(seq 100)
do
          # 从文件描述符中读取一行,读到后生成子进程向下执行,读不到就等待;模拟进程锁
          read -u 9 P
          {
             # 子进程执行的实际任务
             echo "${P} "
             sleep(2)
             # 将从文件描述符中读取的内容重新写回文件描述符;模拟释放进程锁
             echo ${P} >&9
            } &
done

wait

echo "All Completed"

# 删除文件描述符
exec 9>&-

# 删除临时管道文件
rm -f ${FIFO_FILE}

exit 0

shell模拟进程池

原文:https://blog.51cto.com/784687488/2501555

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!