shell多线程之进程间通信

# 这是一个简单的并发程序,有如下要求:
# 1.有两个程序a和b,希望他们能并发执行,以节约时间
# 2.a和b都是按照日期顺序执行,但b每日程序的前提条件是当日a的程序已经执行完毕
#解决方案:
# 1.创建一个文件描述符作为pipe,a程序每次执行完就把一个日期发送给pipe,然后继续执行
# 2.b程序每次执行时先从pipe读取a的日期,如果a的日期>=b的日期,则b继续执行,否则阻塞。

[ -e /tmp/fd5 ] || mkfifo /tmp/fd5
exec 5<>/tmp/fd5
rm -rf /tmp/fd5

aFun(){
for((i=0;i<10;i++))
do
    echo ‘a‘$i
    sleep 1
    echo $i >&5
done
}

bFun(){
for((i=0;i<10;i++))
do
    read -u5 j
    if [ $i -le $j ];then
            echo ‘b‘$i
    fi
    sleep 1
done
}
###################################################
aFun &
bFun
exec 5<&-
exec 5>&-

原文地址:https://www.cnblogs.com/wangbin2188/p/9851245.html

时间: 2024-08-30 16:37:29

shell多线程之进程间通信的相关文章

linux shell 多线程执行程序

Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能. 直接看代码示例吧. (1) 顺序执行的代码 1 #!/bin/bash 2 date 3 for i in `seq 1 5` 4 do 5 { 6 echo "sleep 5" 7 sleep 5 8 } 9 done 10 date 输出: Sat Nov 19 09:21:51 CST 2016 sleep 5 sleep 5 sleep 5 sleep 5 sleep 5 Sat N

shell多线程

关于shell的多线程 1. 多线程并发执行任务,而不用一台台的串行执行,能更快更高效 2. Shell并没有多线程的概念,所以: * 一般使用wait.read等命令技巧性地模拟多线程实 * 使用命名管道(fifo)来实现多线程的控制 3. 用途:需要对多主机批量执行检查或操作时(例如ssh.ping等操作) 分段解析一个例子来理解一个多线程脚本的书写 1. 新建fifo类型文件 tmp_fifofile="/tmp/$$.fifo" mkfifo $tmp_fifofile #新建

Linux Shell 多线程编程--原创

相关命令文件 1.runCommandInThreads.sh 多线程实现主代码 cdir=$(dirname $BASH_SOURCE) ##Current directory of this script file. source $cdir/logUtil.sh function createFile() { local dir=$1 local idx=$2 local fl="$dir/$idx" touch $fl } function execShellCommand()

Linux Shell 多线程编程

#!/bin/bash #---------------------------–  # 此例子说明了一种用wait.read命令模拟多线程的一种技巧  # 此技巧往往用于多主机检查,比如ssh登录.ping等等这种单进程比较慢而不耗费cpu的情况  # 还说明了多线程的控制  #---------------------------– function a_sub { # 此处定义一个函数,作为一个线程(子进程)    sleep 3 # 线程的作用是sleep 3s  } tmp_fifof

Shell多线程脚本

<--目录--> 1)多线程概述 2)多线程脚本内容 3)多线程脚本执行时间 4)单线程脚本内容 5)单线程脚本执行时间 [多线程概述] # 多线程指并发执行任务,而不是一台一台的串行来执行任务,这样可以更快且更高效的利用资源 # 我们来描述一下怎么准确控制并发数目 # 下面例子说明了一种用wait.read命令模拟多线程的一种技术技巧 # 此技巧往往用于多主机检查,比如ssh登陆.ping等等这种单进程比较慢而不耗费CPU的情况 # 还说明了多线程的控制 [多线程脚本内容] #!/bin/b

shell 命名管道,进程间通信, ncat作http server

命名管道基础 命名管道也被称为FIFO文件, 在文件系统中是可见的,并且跟其它文件一样可以读写! 命名管道特点: 当写进程向管道中写数据的时候,如果没有进程读取这些数据,写进程会堵塞 当读取管道中的数据的时候,如果没有数据,读取进程会被堵塞 当写进程堵塞的时候,有读进程读取数据,那么写进程恢复正常 当读进程堵塞的时候,如果写进程写了数据,那么读进程会读取数据,然后正常执行后面的代码 # 写进程堵塞的情况 [[email protected]_10.2.1.242 test]$ echo 1 >p

Shell多线程编程的实例

#!/bin/bash # a_sub(){     sleep 5 } Multi_Thread(){     THREAD=5             # 此处定义线程数     TMP_FIFO="/tmp/$.fifo"     /usr/bin/mkfifo $TMP_FIFO    # 新建一个fifo类型的文件     exec 6<>$TMP_FIFO     /bin/rm -f $TMP_FIFO      # 将fd6指向fifo类型     for 

shell多线程控制

#!/bin/bash # current time:2016-11-02 16:14:56 LANG=en_US.UTF-8 start=`date +%s` thread=80 mkfifo ugc exec 4<>ugc for ((i=0;i<$thread;i++)) do echo -ne "\n" 1>&4 done while read line do { read -u 4 { curl -r 0-1 -o /dev/null &quo

[ SHELL编程 ] shell多线程操作实例

1.需求 查找192.168.0.*网段中所有未使用过的IP 2.实现     我们知道查找未使用IP的方法可以使用ping命令完成.对于单个IP的判断,使用命令如下 $ ping -c 1 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.031 ms --- 192.168.0.1 ping statistic