首页 > 其他 > 详细

利用管道实现Shell多进程

时间:2014-01-14 21:44:56      阅读:522      评论:0      收藏:0      [点我收藏+]

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

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

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

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

bubuko.com,布布扣
#!/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
bubuko.com,布布扣

利用管道实现Shell多进程

原文:http://www.cnblogs.com/westfly/p/3513752.html

(0)
(0)
   
举报
评论 一句话评论(0
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!