这里以ping网段做为应用示例
#!/bin/bash
#线程数
DXC=150
#定义描述符为9的管道dxctmp20180912为临时文件名,不要取和存在的主目录同名
mkfifo dxctmp20180912
exec 9<>dxctmp20180912
rm -rf dxctmp20180912
#预先写入指定数量的换行符,一个换行符代表一个进程
for ((i=0;i<$DXC;i++))
do
echo -ne "\n" 1>&9
done
for y in 192.168.{0..50}.{1..254}
do
{
#进程控制
read -u 9
{
ping -c2 -i0.5 -w1 $y &> /dev/null
if [ $? -eq 0 ];then
echo "$y Is OK"
fi
#进程续用
echo -ne "\n" 1>&9
}&
}
done
wait
#都执行完毕后,关闭父进程
exec 9>&-
echo "All done"
查看进程情况方法,可以通过pstree工具
[root@bakserver tmp]# pstree -sg 1024 //输入进程ID号
systemd(1)───sshd(1024)─┬─sshd(6390)───bash(6394)───mysql(6823)
├─sshd(6925)───bash(6929)───iii(10215)─┬─iii(10215)───ping(10215)
│