shell中有个&,表示该程序在后台执行,其实是fork了一个子进程,跟系统调用是一样的。
在实际的操作过程中,有时需要控制后台程序的个数,毕竟启动太多的后台,会对服务的性能造成影响。
所以需要控制后台程序的个数。
在Shell中,可以利用管道技术来实现,如下是程序的模板及其注释,有需要人可以拿去。
#!/bin/bash fifo="/tmp/$$.fifo" #建立管道$$表示shell分配的进程号
mkfifo $fifo
exec <>$fifo #将fifo的fd与6号fd绑定
thread_num= #启动的进程个数
count=;
#预分配资源
while [[ $count -lt $thread_num ]]; do
echo >&
#let count=count+
count=$((count + ))
done
#任务列表
file_list=$
for file in $file_list
do
read -u6 #请求一个资源
{
echo "Task Begin"
sleep
echo $file #任务
echo "Task End"
# produce a cook
echo >& #完成任务,释放一个资源
}& #后台执行
done
wait #等待所有的任务完成
exec >&- #关闭fd 6描述符
rm $fifo