zoukankan      html  css  js  c++  java
  • 利用管道实现Shell多进程

    shell中有个&,表示该程序在后台执行,其实是fork了一个子进程,跟系统调用是一样的。

    在实际的操作过程中,有时需要控制后台程序的个数,毕竟启动太多的后台,会对服务的性能造成影响。

    所以需要控制后台程序的个数。

    在Shell中,可以利用管道技术来实现,如下是程序的模板及其注释,有需要人可以拿去。

    #!/bin/bash
    
    fifo="/tmp/$$.fifo"  #建立管道$$表示shell分配的进程号
    mkfifo $fifo
    exec 6<>$fifo        #将fifo的fd与6号fd绑定
    thread_num=8         #启动的进程个数
    count=0;
    #预分配资源
    while [[ $count -lt $thread_num ]]; do
      echo >&6
      #let count=count+1
      count=$((count + 1 ))
    done
    #任务列表
    file_list=$1
    for file in $file_list
    do
      read -u6       #请求一个资源
      {
        echo "Task Begin"
        sleep 1
        echo $file   #任务
        echo "Task End"
        # produce a cook
        echo >&6     #完成任务,释放一个资源
      }&             #后台执行
    done
    wait             #等待所有的任务完成
    exec 6>&-        #关闭fd 6描述符
    rm $fifo
  • 相关阅读:
    20180530
    vue路由配置出错,导致页面跳转会有闪屏问题
    20180528
    vuecli+ivew项目搭建
    centos6安装mysql
    华为云服务ESC
    centos6安装nginx
    国产操作系统aarch64编译filebeat
    Python常见问题
    Git
  • 原文地址:https://www.cnblogs.com/westfly/p/3513752.html
Copyright © 2011-2022 走看看