在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