FD:文件描述符
常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出)
exec:exec 3<>/tmp/fd1 --文件重定向
#!/bin/bash
#使用命名管道(fifo)实现每次启动后台进程数量可控
[ -e /tmp/fd1 ]||mkfifo /tmp/fd1
exec 3<>/tmp/fd1 # 将fd3指向fifo类型
rm -rf /tmp/fd1
for i in {1..10}
do
echo >&3 #根据线程总数量设置令牌个数(10个)
done
for i in {1..254}
do
# 一个read -u3命令执行一次,就从fd3中减去一个令牌,然后向下执行,
# fd3中没有令牌的时候,就停止,从而实现了线程数量控制
read -u3
{
ping -c 2 -i 0.3 -w 1 10.6.1.$i &>/dev/null
if [ $? -eq 0 ]
then
echo "10.6.1.$i is up"
else
echo "10.6.1.$i is down"
fi
echo >&3 #线程结束后,令牌在放入fd3中,保持线程数量
}&
done
wait
exec 3<&- #关闭fd3