利用管道实现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

 

 

 

 

 

posted @ 2014-01-10 15:04  westfly  阅读(1457)  评论(0编辑  收藏  举报