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

 

 

 

 

 

转载于:https://www.cnblogs.com/westfly/p/3513752.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值