shell多进程-利用命名管道和文件描述符指定同时开启的进程数量

#!/bin/bash

num=5  #控制进程的数量为10
net="10.100.4"
pipefile="/tmp/multiping_$$.tmp"

multi_ping() {
    ping -c2 -i0.2 -W1 $1 &>/dev/null
    if [ $? -eq 0 ];then
        echo "$1 is up"
    else
        echo "$1 is down"
    fi
}

#创建命名管道文件,创建文件描述符,通过重定向将数据导入管道文件
mkfifo $pipefile       #创建命名管道文件
exec 12<>$pipefile  #创建文件描述符
for i in $(seq $num)
do
    echo "" > $12 &
done

for j in {1..254}
do
    read -u12 
    {
        echo "start ping No.$j"
        multi_ping $net.$j  
        echo "stop ping NO.$j"
        echo "" >$12     #read读取了一行,进程占用1行,进程执行完后再向命名管道中追加1行数据
    } &  #中括号表示代码块,不会开启子进程执行
done
wait
rm -f $pipefile
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容