生产中当我们遇到遇到一个操作需要重复处理时,我们可以通过脚本加多进程的方式来做到快速处理,但是如果这个操作要打开的进程数量过于庞大时,此时我们的服务器可能承载不了这么重的负担,我们就可以通过FD加命名管道做到控制多进程.
[root@git scripts]# cat ping_thread.sh
#!/bin/sh
therad=10
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 7<> $tmp_fifofile ##打开一个进程文件
rm -rf $tmp_filefofile
for i in `seq $therad`
do
echo >&7 ##输入空格到进程文件,一个10个
done
for i in {1..254}
do
read -u 7 ##读取线程文件
{
IP=172.16.210.$i
ping -c1 -W1 $IP > /dev/null 2>&1
[ $? -eq 0 ] && echo "$IP"
echo >&7 ##输入一个空格到进程文件
}&
done
wait
exec 7>&- ##关闭进程文件
echo "在线ping测试完成"
[root@git scripts]# sh ping_thread.sh ##执行脚本
172.16.210.1
172.16.210.13
172.16.210.12
172.16.210.36
在另外一个终端查看进程
[root@git ~]# ps aux | grep "ping -c1"
root 4380 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.34
root 4383 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.35
root 4387 0.0 0.0 128444 1260 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.37
root 4389 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.38
root 4391 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.40
root 4393 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.39
root 4394 0.0 0.0 128444 1268 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.41
root 4396 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.42
root 4398 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.43
root 4400 0.0 0.0 128444 1264 pts/0 S+ 11:51 0:00 ping -c1 -W1 172.16.210.44
root 4402 0.0 0.0 112728 976 pts/1 S+ 11:51 0:00 grep --color=auto ping -c1
成功控制进程在10个
网友评论