用fifo来处理shell下的多进程并发
  
  
   时间:2016-06-05 00:16来源:linux.it.net.cn 作者:IT
  
  
   
    
     
      今天看到个不错的shell多进程并发脚本的讲解,现共享给大家: 
	
		  
	
		
		
			
			
				
					
						
							| 
								02 | 
							
								#author :  peterguo@tencent.com | 
						 
					
				 
			 
			
			
			
				
					
						
							| 
								05 | 
							
								#sub process do something | 
						 
					
				 
			 
			
				
					
						
							| 
								06 | 
							
								function a_sub_process { | 
						 
					
				 
			 
			
				
					
						
							| 
								07 | 
							
								    echo "processing in pid [$$]" | 
						 
					
				 
			 
			
			
			
			
			
			
			
			
			
				
					
						
							| 
								16 | 
							
								exec 6<>$FIFO_FILE     # 将fd6指向fifo类型 | 
						 
					
				 
			 
			
			
			
			
			
			
				
					
						
							| 
								22 | 
							
								#向fd6中输入$PROCESS_NUM个回车 | 
						 
					
				 
			 
			
				
					
						
							| 
								23 | 
							
								for ((idx=0;idx<$PROCESS_NUM;idx++)); | 
						 
					
				 
			 
			
			
			
			
			
			
				
					
						
							| 
								29 | 
							
								for ((idx=0;idx<20;idx++)); | 
						 
					
				 
			 
			
			
				
					
						
							| 
								31 | 
							
								    read -u6 #read -u6命令执行一次,相当于尝试从fd6中获取一行,如果获取不到,则阻塞 | 
						 
					
				 
			 
			
				
					
						
							| 
								32 | 
							
								    #获取到了一行后,fd6就少了一行了,开始处理子进程,子进程放在后台执行 | 
						 
					
				 
			 
			
			
			
				
					
						
							| 
								35 | 
							
								         echo "sub_process is finished" | 
						 
					
				 
			 
			
			
			
			
				
					
						
							| 
								39 | 
							
								      #完成后再补充一个回车到fd6中,释放一个锁 | 
						 
					
				 
			 
			
				
					
						
							| 
								40 | 
							
								      echo >&6# 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个 | 
						 
					
				 
			 
			
			
			
			
			
		 
	 
 
 
 
      (责任编辑:IT) | 
    
   
 
 
  
  
  
   
   ------分隔线----------------------------