Day 37 shell并发控制

一:FD文件描述符

1.FD简述

​ FD:文件描述符/文件句柄

​ 进程使用文件描述符用来管理进程打开的文件

为指定文件生成文件描述符:exec 文件描述符<>指定文件

释放文件描述符:exec 文件描述符<&-

shell 复制代码
[root@xingdiancloud ~]# ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64  4月 16 23:51 0 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 1 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 2 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 255 -> /dev/pts/0
[root@xingdiancloud ~]# touch file1
启用自定义文件描述符打开文件
[root@xingdiancloud ~]# exec 6<> file1
[root@xingdiancloud ~]# ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64  4月 16 23:51 0 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 1 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 2 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 255 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 6 -> /root/file1
[root@xingdiancloud ~]# echo "xingdian" > /proc/$$/fd/6
[root@xingdiancloud ~]# cat file1
xingdian
[root@xingdiancloud ~]# rm -rf file1
[root@xingdiancloud ~]# ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64  4月 16 23:51 0 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 1 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 2 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 255 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 6 -> '/root/file1 (deleted)'
[root@xingdiancloud ~]# cat /proc/$$/fd/6
xingdian
释放文件描述符
[root@xingdiancloud ~]# exec 6<&-
[root@xingdiancloud ~]# ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64  4月 16 23:51 0 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 1 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 2 -> /dev/pts/0
lrwx------. 1 root root 64  4月 16 23:51 255 -> /dev/pts/0

注意:

​ exec打开一个文件

​ exec关闭一个文件(释放文件句柄)

​ 当一个文件FD未被释放,删除源文件也不会影响FD

2.管道简述

匿名管道

shell 复制代码
[root@xingdiancloud ~]# rpm -qa | grep rpm

命令管道

创建命名管道:mkfifo 管道名

shell 复制代码
[root@xingdiancloud ~]# mkfifo /tmp/xingdian
[root@xingdiancloud ~]# file /tmp/xingdian
/tmp/xingdian: fifo (named pipe)
[root@xingdiancloud ~]# tty
/dev/pts/0
[root@xingdiancloud ~]# rpm -qa > /tmp/xingdian

另一个终端
[root@xingdiancloud ~]# grep bash /tmp/xingdian
bash-5.1.8-6.el9.x86_64
bash-completion-2.11-4.el9.noarch
[root@xingdiancloud ~]# tty
/dev/pts/1
3.FD案例
shell 复制代码
[root@xingdiancloud ~]# cat a.sh
#!/bin/bash
exec 7<> /etc/hosts
exec 8<> /etc/hostname

while read -u 7 line
do
        echo $line
done
while read -u 8 line2
do
        echo $line2
done
exec 7<&-
exec 8<&-

[root@xingdiancloud ~]# bash a.sh
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
xingdiancloud

4.并发案例

shell 复制代码
#!/usr/bin/bash
#固定线程
read -p "请输入线程数量:" diange
diangefile=/root/diangefile
mkfifo $diangefile                //虚拟管道
exec 8<>$diangefile               //文件描述
rm -rf $diangefile

for i in `seq $diange`
do
        echo  >&8                   //将内容写入到描述文件中,写如了空行
done

for i in {1..100}
do
        read -u 8                   //read 读取描述文件中的内容
        {
        ip=192.168.101.$i
        ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip is up"
        else
                echo "$ip is down"

        fi
        echo >&8                   //等到进程执行完之后再往管道里丢内容以支持后面的循环
        }&
done
wait
echo "完成"
exec 8<&-                          //释放描述文件
相关推荐
dalerkd9 分钟前
企业产品网络安全日志6月10日-WAF资费消耗排查
网络·安全·web安全
shawn081 小时前
内网有猫和无线路由器,如何做端口映射从而实现外网访问
网络·智能路由器
卫生纸不够用1 小时前
(三)Linux性能优化-CPU-CPU 使用率
linux·运维·服务器
云布道师2 小时前
云服务运行安全创新标杆:阿里云飞天洛神云网络子系统“齐天”再次斩获奖项
网络·人工智能·安全·阿里云·云计算·云布道师
Clownseven2 小时前
Ubuntu 24.04 LTS 长期支持版发布:对服务器用户意味着什么?新特性、升级建议与性能影响初探
linux·服务器·ubuntu
晴天¥2 小时前
第二部分-IP及子网划分
服务器·网络·tcp/ip
wanhengidc2 小时前
高防服务器中高防和硬防之间的区别
运维·服务器·网络
Xam_d_LM2 小时前
【Linux】服务器反向代理自动续签免费 Let‘s Encrypt 证书报错解决方法
linux·运维·服务器·反向代理·lets encrypt·http-01·证书续签
wanhengidc2 小时前
服务器硬防的应用场景都有哪些?
运维·服务器·网络
复园电子2 小时前
USB扩展器与USB服务器的2个主要区别
运维·服务器