返回顶部
首页 > 资讯 > 精选 >shell的多进程实现
  • 151
分享到

shell的多进程实现

2023-06-06 00:06:37 151人浏览 泡泡鱼
摘要

方法总结:    1. command & + wait 方式    2. 管道fifo       



方法总结

    1. command & + wait 方式
    2. 管道fifo

                   
    1.1
    实例1.1:将需要多进程执行的程序块全部使用command & wait 转移到后台执行即可。
          用“{}”将主执行程序变为一个块,用&放入后台,四次执行全部放入后台后,
          需要用一个wait指令,等待所有后台进程执行结束,
          不然系统是不会等待的,直接继续执行后续指令,直到整个程序结束。
    
     #!/bin/bash
     start=`date +"%s"`
     for (( i=0; i<10; i++ ))
     do
         {
             echo "success!!!"
             sleep 3
         } &  #将上述程序块放到后台执行
     done
     wait    #等待上述程序结束
     end=`date +"%s"`
     echo "time: " `expr $end - $start`
     
    
    2.1
    实例2.1:
    #!/bin/sh
    function a_sub {
        sleep 2;
        endtime=`date +%s`
        sumtime=$[$endtime-$starttime]
        echo "我是whl,整个脚本已经执行了$sumtime秒"
    }
    
    starttime=`date +%s`
    export starttime
    
    tmp_fifofile="/tmp/$$.fifo"               ##其中$$为该进程的pid
    
    mkfifo $tmp_fifofile                      ##创建命名管道
    
    exec 6<>$tmp_fifofile                     ##把文件描述符6和FIFO进行绑定
        
    rm -f $tmp_fifofile                       ##绑定后,该文件就可以删除了
        
    thread=30                                 ##进程并发数为30,用这个数字来控制一次提交的请求数
    
    for ((i=0;i<$thread;i++));
    do    
        echo >&6                              ##写一个空行到管道里,因为管道文件的读取以行为单位
    done
    
    
    while read dat
    do
          ##读取管道中的一行,每次读取后,管道都会少一行
        read -u6
        {        a_sub || {echo "a_sub is failed"}
                   echo $dat
                   echo >&6                     ##每次执行完a_sub函数后,再增加一个空行,这样下面的进程才可以继续执行
        } &
    done<data.txt
    
    wait                                     ##这里的wait意思是,需要等待以上所有操作(包括后台的进程)都结束后,再往下执行。
       
    exec 6>&-                                ##关闭文件描述符6的写
    exec 6<&-
         
         
         
     
     实例2:多线程备份数据库
     
     #!/bin/bash
     hour=`date +%H`
     day=`date +%F`
     now=`date +%F_%H`
     all_dbs="no"
     passwd="mysql_pass"
     sshpass="ssh_pass"
     dbs="db1 db2 db3 dbx dby dbz"
     
     cpu_num=`cat /proc/cpuinfo |grep processor|wc -l`
     p_fifo="/tmp/$$.pipo"
     mkfifo $p_fifo
     exec 111<>$p_fifo       #关联文件描述符和管道
     rm -f $p_fifo
     trap "exec 111>&-;exec 111<&-;exit 0" 2    
     for ((i=1; i<=$cpu_num; i++))
     do
         echo >&111             #定义进程队列大小,cpu核数
     done
     
     function backup()
     {
         if [ $all_dbs == "no" ];then
             for db in $dbs
             do
                 read -u111      #从队列中获取一个消息,队列中消息数减一
                 {
                 dbname=`echo $db|sed "s/-/@002d/g"`
                 ops="--parallel=5 --compress-threads=5 --databases=$dbname"
                 bpath="/data1/ehr-Mysql-backup/${day}/${db}"
                 inbackup
                 sleep 10
                 echo >&111  #添加一个消息到队列中,维持队列中消息数不变(进程个数)
                 } &               #将代码块放后台处理
             done
             wait                 #等待所有后台进程处理完
             exec 111>&-          #关闭描述符,写关闭
             exec 111<&-          #关闭描述符,读关闭
         else
             ops="--parallel=5 --compress-threads=5"
             bpath="/data1/ehr-mysql-backup/${day}"
             inbackup
         fi
     }
     
     function inbackup()
     {
         if [ -f ${bpath}/lsn_${last}/xtrabackup_checkpoints ];then
             echo "incremental_basedir found,do a increment backup"
             /usr/bin/innobackupex -u root -p${passwd} --no-timestamp ${ops} --incremental --incremental_basedir=${bpath}/lsn_${last}/ --extra-lsndir=${bpath}/lsn_${now}/ ${bpath} --stream=xbstream |gzip |sshpass -p "${sshpass}" ssh -p 18122 root@10.10.10.79 "cat - > ${bpath}/${now}.xbstram.gz"
         else
             echo "incremental_basedir not found,do a full backup"
             /usr/bin/innobackupex -u root -p${passwd} --no-timestamp ${ops} --extra-lsndir=${bpath}/lsn_${now}/ ${bpath} --stream=tar |gzip |sshpass -p "${sshpass}" ssh -p 18122 root@10.10.10.79 "cat - > ${bpath}/${now}.tgz"
         fi
     
     }
     
     case $hour in
     22)
             last=`date +%F -d -yesterday`
             find /data1/ehr-mysql-backup/ -name "${last}*" -type d -exec rm -r "{}" \;
             day=`date +%F -d +1days`
             backup
             ;;
     10)
             last=`date +%F_%H -d -12hours`
             backup
             ;;
     14|18)
             last=`date +%F_%H -d -4hours`
             backup
             ;;
     *)
             echo "not backup time"
             ;;
     esac
          
         

--结束END--

本文标题: shell的多进程实现

本文链接: https://lsjlt.com/news/245543.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • shell的多进程实现
    方法总结:    1. command & + wait 方式    2. 管道fifo       ...
    99+
    2023-06-06
  • shell脚本实现多进程运行的方法示例
    本文主要跟大家分享了shell脚本实现多进程运行的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 例子 for ip in 192.168.56.{1..254} do ( ping ...
    99+
    2022-06-04
    示例 脚本 进程
  • shell脚本实现多彩进度条
    先贴代码 #!/bin/bash i=0; str="" arr=("|" "/" "-" "\") while [ $i -le 100 ] do let index=i%4 let inde...
    99+
    2022-06-04
    脚本 多彩 进度条
  • 使用shell脚本怎么实现多进程运行
    这篇文章将为大家详细讲解有关使用shell脚本怎么实现多进程运行,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。例子for ip in 192.168.56.{1...
    99+
    2023-06-09
  • python3多进程实现
    python多进程的主要方式有两种,一种是使用os模块的fork方法,另一种方法是使用multiprocessing模块,这两种方法的就别在于前者仅适用于Unix/Linux操作系统,后者是跨平台的实现方式 1.使用fork方法实...
    99+
    2023-01-31
    进程
  • Shell脚本实现的memcached进程监控
    WEB服务器使用memcached,但是不知道为什么memcached老是挂掉(基本20分钟~50分钟左右),导致部分网站页面在访问的时候出错;定义日志后,查看日志也未能发现什么;初步判定由于之前更新lib...
    99+
    2022-06-04
    脚本 进程 Shell
  • shell脚本如何实现多彩进度条
    这篇文章将为大家详细讲解有关shell脚本如何实现多彩进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先贴代码#!/bin/bashi=0;str=""arr=("|&q...
    99+
    2023-06-09
  • python 多进程实现ssh
    多进程实现多台服务器ssh命令:# -*- coding: UTF-8 -*- from multiprocessing import Process,Pool import paramiko import sys,os host_list...
    99+
    2023-01-31
    进程 python ssh
  • Node多进程的实现方法
    目录1. child_process 模块2. spawn3. fork4. exec和execFile5. 各方法之间的比较5.1 spawn和execFile5.2 execFi...
    99+
    2022-11-13
    Node 多进程 Node 多进程通信
  • python多进程怎么实现的
    python 多进程使用 multiprocessing 模块实现。关键类和函数包括:process(代表进程)、pool(管理进程和任务分配)、queue(进程间数据传递)、lock(...
    99+
    2024-05-22
    python
  • Shell脚本实现查杀子进程、僵尸进程
    核心服务器上跑了一堆的脚本、程序,难免有时候会出现僵尸进程,死不死活不活的在那里占用资源,最初只是写了个根据关键字查杀进程的linux shell脚本,后来发现很多时候进程死在那里的时候其实是内部调用子进程...
    99+
    2022-06-04
    进程 僵尸 查杀
  • python多进程实现进程间通信实例
    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个...
    99+
    2022-06-04
    进程 实例 通信
  • linux shell实现守护进程脚本
    嵌入式初学者,第一次上传代码。昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢? #! /bin/sh #进程名字可修改 PRO_NAME=udhcp...
    99+
    2022-06-04
    脚本 进程 linux
  • Node.js中child_process实现多进程
    var http = require('http'); function fib (n) { if (n < 2) { return 1; } else { ...
    99+
    2022-06-04
    进程 Node js
  • Linux下怎么实现shell多线程编程
    本篇内容介绍了“Linux下怎么实现shell多线程编程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  Linux中多线程编程拥有提高应用...
    99+
    2023-06-13
  • 小程序如何实现多进程
    这篇文章将为大家详细讲解有关小程序如何实现多进程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言小程序这个名词相信大家已经不陌生了,继微信之后,阿里巴巴、百度、头条等大厂相继实现了自己的小...
    99+
    2023-06-04
  • Node.js 中怎么实现多线程和多进程
    这期内容当中小编将会给大家带来有关Node.js 中怎么实现多线程和多进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为什么要用 NodeJSJavaScript 最初...
    99+
    2024-04-02
  • c#多进程通讯的实现示例
    目录引言共享内存Windows的MSMQ命名管道匿名管道Channel     IPC     Http  &n...
    99+
    2024-04-02
  • Node的多进程服务如何实现
    这篇文章主要介绍“Node的多进程服务如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node的多进程服务如何实现”文章能帮助大家解决问题。我们现在已经知道了Node是单线程运行的,这表示潜在...
    99+
    2023-07-01
  • php如何实现多进程和关闭进程的方法
    本篇内容介绍了“php如何实现多进程和关闭进程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现关闭进程的方法:首先创建一个PH...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作