码迷,mamicode.com
首页 > 系统相关 > 详细

shell模拟进程池

时间:2020-06-05 14:43:17      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:临时   ESS   子进程   就是   生成   exec   inf   新建   exe   

废话不多说,直接上脚本。下面的脚本可以直接执行看效果
#!/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模拟进程池

标签:临时   ESS   子进程   就是   生成   exec   inf   新建   exe   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!