shell的多进程方式

之前在用脚本去分析大的日志文件的时候,因为文件有几十G之大,记录数达到上千万量级甚至更多时,单进程的脚本去分析,效率非常低下,耗时也会相当久,因此这时候就需要用到shell的多进程机制,以加快分析进度。
多进程方式主要分为以下3种方式
1)代码段后台执行方式
例子从网上摘抄:
#!/bin/bash
  for ((i=0;i<5;i++));do
  {
  sleep 3;echo 1》aa && echo ”done!”
  } &
  done
  wait
  cat aa|wc -l
  rm aa
wait是等待前面的后台任务全部完成才往下执行,否则程序本身是不会等待的。还可以只wait subprocessid 只等待某一个子进程结束。
2)精确控制最多并发进程数目的多进程
    mutil_proc(){
    ...需要进行多进程操作的步骤
    }
    tmp_fifofile=”/tmp/$.fifo”
  mkfifo $tmp_fifofile          # 新建一个fifo类型的文件
  exec 6<>$tmp_fifofile      # 将fd6指向fifo类型
  rm $tmp_fifofile
  thread=15 # 此处定义线程数
  for ((i=0;i<$thread;i++));do
  echo
  done >&6 # 事实上就是在fd6中放置了$thread个回车符
  for ((i=0;i<50;i++));do # 50次循环,可以理解为总的需要执行次数
  read -u6
    # 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,
  # fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制
 
    {                      # 此处子进程开始执行,被放到后台
       mutil_proc  && {             # 此处可以用来判断子进程的逻辑
      echo ” mutil_proc  is finished”
      } || {
      echo ” mutil_proc  error”
      }
     echo >&6           # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
  } &                   #后台执行实现多进程
  done
  wait                   # 等待所有的后台子进程结束
  exec 6>&-              # 关闭df6
  exit 0
3)主要是为了简单,而通过切割文件,然后后台执行的方式实现多进程(自创)
例如:
1. 先指定行数进行分割文件
split -l ${splits3} -d ${MAIN_PATH}doubt.txt_${day} ${MAIN_PATH}split/doubt.txt
2.编写循环对多份分割文件后台执行以实现多进程
function analyse()
{
cd ${MAIN_PATH}split/
for file in `ls doubt.txt*`
do
${MAIN_PATH}pvexecurl.sh $file &
done
wait
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值