38 lines
896 B
Bash
38 lines
896 B
Bash
#!/bin/bash
|
|
#=========================================
|
|
# Filename : process_pool.sh
|
|
# Author : Colben
|
|
# Create : 2018-12-14 19:04
|
|
#=========================================
|
|
|
|
#set -euo pipefail
|
|
export LANG=en_US.UTF-8
|
|
#[ 0 = $UID ] || exit 1
|
|
# 创建有名管道,模拟 go 的有缓存 channal
|
|
rm -rf pool.pipe && mkfifo pool.pipe || exit 1
|
|
exec 1022<> pool.pipe && rm -f pool.pipe
|
|
|
|
# 初始向有名管道写入10个字符
|
|
printf "%10s" '' >&1022
|
|
|
|
# 功能: 执行一个任务
|
|
# 根据业务需求自己实现
|
|
function ExecTask {
|
|
local ts=$1
|
|
sleep $[ts%10]
|
|
}
|
|
|
|
# 测试开始
|
|
for task in $(seq 11 88); do # 这里的多任务用几个整数模拟
|
|
read -n1 -u1022 # 每次执行任务前读出一个字符
|
|
(
|
|
ExecTask $task
|
|
echo -n '.'
|
|
echo >&1022 # 每次执行任务后再写入一个字符
|
|
) & # 后台启动任务
|
|
done
|
|
wait
|
|
echo
|
|
# 测试结束
|
|
|