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
  • 相关阅读:
    20191024-1 每周例行报告
    萌猿纵横字谜引擎实现过程
    Blender插件加载研究
    Blender插件初始化范例
    Blender插件编写指南
    Blender之Property
    Blender之UILayout
    Blender插件之Panel
    Blender插件之操作器(Operator)实战
    向量之基底
  • 原文地址:https://www.cnblogs.com/westfly/p/3513752.html
Copyright © 2011-2022 走看看