Linux BASH多進程並行處理的方法實現

在shell中進行多進程處理,之前寫的都是單進程的,今天看了一篇文章講了linux的多進程處理。linux

#!/bin/bash 

SEND_THREAD_NUM=13 
tmp_fifofile="/tmp/$$.fifo" # 腳本運行的當前進程ID號做爲文件名 
mkfifo 「$tmp_fifofile" # 新建一個隨機fifo管道文件 
exec 6<>"$tmp_fifofile" # 定義文件描述符6指向這個fifo管道文件 
rm $tmp_fifofile 
for ((i=0;i<$SEND_THREAD_NUM;i++));do 
echo # for循環 往 fifo管道文件中寫入13個空行 
done >&6 

for i in `seq 100`;do # 100 次 for 循環 開始 
read -u6 # 從文件描述符6中讀取行(實際指向fifo管道) 
{ 
echo $i # 打印 i 
sleep 3 # 暫停3秒 
echo >&6 # 再次往fifo管道文件中寫入一個空行。 
} **&** 

# {} 這部分語句被放入後臺做爲一個子進程執行,因此沒必要每次等待3秒後執行 
#下一個,這部分的echo $i幾乎是同時完成的,當fifo中13個空行讀完後 for循環 
# 繼續等待 read 中讀取fifo數據,當後臺的13個子進程等待3秒後,按次序 
# 排隊往fifo輸入空行,這樣fifo中又有了數據,for語句繼續執行 

pid=$! #打印最後一個進入後臺的子進程id 
echo $pid 

done 
**wait** 
exec 6>&- #刪除文件描述符6 

exit 0

多進程的實現,主要有兩點shell

一、將當前的進程放到後臺去執行,要用到&bash

二、在shell腳本的最後面加上wait,等待全部進程完成後再進行後續處理code

相關文章
相關標籤/搜索