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