• shell 多线程


    普通多线程(准确的讲应该是多进程),这种模式 并发大的时候会报错,影响运行速度

    不可控制线程的数量

    #!/bin/bash
    
    for i in {1..254}
    
    do

        #后台运行,每次都创建新的线程(进程)
    { ip=192.168.179.$i ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip is up!!" else echo "$ip is down" fi }& done wait echo "all funish..."

    文件描述符多线程(准确的讲是多进程),可以控制线程的数量

    #!/bin/bash
    #线程数
    thread=5
    #零时文件 tmp_fifofile=/tmp/$$.fifo #创建管道文件 mkfifo $tmp_fifofile
    #打开管道文件设置描述符为8,也可以是其他 exec
    8<> $tmp_fifofile
    #删除文件,文件删除,文件描述符还是存在的,主要用到了文件描述符(文件没有用就删除了)
    rm $tmp_fifofile for i in `seq $thread` do
    #文件描述符写入空格占位(写入其他内容也可以,只要写入就能占位       
    echo >&8
    done
    
    for i in {1..254}
    
    do
    #读取文件描述符
            read -u 8
            {
    
            ip=192.168.179.$i
    
            ping -c1 -W1 $ip &> /dev/null
    
            if [ $? -eq 0 ];then
    
                    echo "$ip is up!!"
            else
                    echo "$ip is down"
    
            fi
    #读取完,再写入占位,放入管道
            echo >&8
    
            }&
    
    done
    #等待线程
    wait

    #释放文件描述符
    exec 8>&- echo "all funish..."
  • 相关阅读:
    Gitee 码云 pages 搭建vue项目记录
    vscode 双击选中用中划线拼接的名称和几个常用的扩展
    在ios微信客户端遇到的坑,input等错位
    vscode管理员身份运行
    使用tcpdump测试反向代理和lvs的nat区别
    Linux配置snmp
    Nginx做web服务器反向代理
    centos7.1安装tomcat8
    kvm报错集
    lsof一些使用
  • 原文地址:https://www.cnblogs.com/zhoufly-blog/p/11456122.html
Copyright © 2020-2023  润新知