并发控制

#(File Descriptors) FD,文件描述符,文件句柄
#使用文件描述符管理打开的文件
#当一个文件FD未被释放,删除源文件也不会影响
ls /proc/$$/fd  #$$ 当前进程,查看打开的文件描述符
exec 6<> file #手动定义打开文件描述符
echo "test" >> /proc/$$/fd/6  #通过文件描述符写入数据
exec 6<&- #关闭文件

#管道也是文件,但只能查看一次,不像静态文件
rpm -qa|grep bash  #匿名管道  只能在一个终端
mkfifo /tmp/fifo1  #命名管道  可以跨终端  命名管道可以视为一个进程的输入,用来另外一个进程的输出

 

#!/usr/bin/bash
thread=5
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile

exec 8<> $tmp_fifofile
rm $tmp_fifofile

for i in `seq $thread`
do
	echo >&8 #&8简写(/proc/$$/fd/8) 文件描述符
done

for i in {1..254}
do
	read -u 8 #-u 从文件描述符读取数据
	{
		ip=192.168.201.130
		ping -c1 -W1 $ip &>/dev/null
		if [ $? -eq 0 ];then
			echo "$ip is up"
		else 
			echo "$ip is down"
		fi
		echo >&8 #再写入数据 保证线程梳理
	}&
done

wait
echo "finish ...."

  

 

posted @ 2022-11-30 23:30  smatterer  阅读(42)  评论(0)    收藏  举报