美文网首页
shell入门14-多进程处理ping应用

shell入门14-多进程处理ping应用

作者: 万州客 | 来源:发表于2022-12-31 09:34 被阅读0次

这不是简单的ping,而是结合了文件描述符,命名通道的多进程ping。

一,ping的高级版本

#!/bin/bash
# 多进程处理ping应用,结合命名管道和文件描述符,使用read,每次读一行
# 使用wait命令等待所有子进程结束后再退出脚本

# 控制进程数量
num=10
net="192.168.1"
pipefile="/tmp/multiping_$$.tmp"

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


# 创建命名管道文件,创建其文件描述符,通过重定向将数据导入管道文件。
echo "创建命名管道"
mkfifo $pipefile
echo "创建12号文件描述符"
exec 12<>$pipefile
for i in `seq $num`
do
  echo "这里写入10个空的内容,12号文件描述符,等待read命令读取"
  echo "" >&12 &
done

# 通过循环反复调用函数将并其放入后台并执行
# 成功读取命名管道中的数据后开启新的进程
# 所有内容读取完成后read被阻塞,无法再启动新的进程
# 等待前面启动的所有进程结束后,继续往管道文件中写入数据,释放阻塞,开启新的进程
for j in {1..254}
do
  echo "这里使用read -u12命令从12号文件描述符中读取"
  read -u12
  {
    multi_ping $net.$j
    echo "这里处理完multi_ping函数后,再次写入空的内容取12号文件描述符"
    echo "" >&12
  } &
done
#等待进程返回
wait
#删除管道文件

rm -rf $pipefile

二,,LNMP安装的脚本框架

#!/bin/bash
# 功能描述:一键部署LNMP环境

# 设置各种显示消息的颜色属性
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;34m"
SETCOLOR_NORMAL="echo -e \\033[0;39m"

# 测试YUM源是否可用,awk和sed都用上了。
test_yum() {
  yum clean all &>/dev/null
  num=$(yum repolist -e 0 | awk '/repolist/{print $2}' | sed 's/,//')
  if [ $num -le 0 ]; then
    $SETCOLOR_FAILURE
    echo -n "[ERROR]: 没有YUM源"
    $SETCOLOR_NORMAL
    exit
  fi
}

# 安装LNMP环境所需要的依赖包
intall_deps() {
yum install -y gcc pcre-devel openssl-devel cmake ncurses-devel
yum install -y gcc-c++ bison bison-devel
yum install -y libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel
yum install -y freetype gd gd-devel
yum install -y freetype-devel libxslt libxslt-devel bzip2 bzip2-devel
yum install -y libpng libpng-devel
}

# 源码安装NGINX:创建帐户,激活模块,禁用模块
install_nginx() {
  if ! id nginx &> /dev/null; then
    useradd -s /sbin/nologin nginx
  fi
  # tar -zxvf nginx-1.4.2.tar.gz
  # cd nginx-1.14.2
  # ./configure
  $SETCOLOR_WARNING
  echo -n "正在统计nginx,请耐心等待..."
  $SETCOLOR_NORMAL
  # make &> /dev/null && make install &> /dev/null
  # cd ..
  # ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
}

# 默认源码安装的软件没有service文件无法通过systemd管理
# 手动编写service文件,方便在CentOS的环境中进行管理服务
conf_nginx_systemd() {
  echo "...此处使用cat命令生成/usr/lib/systemd/system/nginx.service文件.."
}

# 源码安装部署MYSQL8.0版本数据库软件
# 注意:需要提前到官司网下载带boost版本的mysql(mysql-boost-8.0.13.tar.gz)
install_mysql8() {
  echo -n ".....此处源码安装mysql8........"
}

# 创建MYSQL配置文件(设置SOCKET文件,数据库目录,优化参数等)
init_mysql8() {
  echo -n "...........创建MYSQL配置文件(设置SOCKET文件,数据库目录,优化参数等)............."
}

install_php7() {
  echo -n "...........安装PHP7......."
}

# 调用执行函数,安装部署LNMP环境
test_yum
# install_deps
install_nginx
conf_nginx_systemd
install_mysql8
init_mysql8
install_php7

相关文章

  • Shell 脚本入门: 多命令处理

    在 Shell 脚本入门: 编写格式和执行方式[https://www.jianshu.com/p/54465dc...

  • adb

    $pid:应用进程ID,可以用PS命令查看 adb shell dumpsys meminfo pid

  • adb 查询应用进程

    1、查看所有apk进程 adb shell ps 2、查看特定apk进程(com.test.app 为应用的包名)...

  • 操作系统

    进程间通信的几种方式 死锁发生的条件 cache的作用 linux如何查看进程号 shell 如何查询a应用的当前...

  • shell编程(一)

    1.shell的入门1)什么是shell 壳命令解释器 用户输入命令 解释器负责解释给内核 处理后的结果 反馈...

  • Linux 下第一个shell脚本

    shell脚本可以高效的完成一件事情,和批处理一个意思。学习写第一个shell脚本。今天开始写一个判断能否ping...

  • 大数据学习-Linux Shell脚本快速入门

    批量处理数据,难免会有在集群中使用Shell脚本,自动跑程序,下面快速入门Shell脚本编程,本文解决一下问题: ...

  • Adb控制台 查看 apk 日志 流程

    1、找到要查看日志应用进程的pid号 ,输入命令 adb shell "ps | grep com.cloud.c...

  • storm 多语言支持实践

    原理 shell bolt 将数据和命令序列化成 json 后输出到shell 进程中,shell 进程接收 js...

  • ps kill awk 杀死同一个应用的所有进程

    ps kill awk 杀死同一个应用的所有进程 测试环境部署的时候经常需要重启,每次杀进程太麻烦,shell也不...

网友评论

      本文标题:shell入门14-多进程处理ping应用

      本文链接:https://www.haomeiwen.com/subject/cuefcdtx.html