shell 並發多進程同時執行


 1 #!/bin/bash
 2 
 3 SEND_THREAD_NUM=13   #設置進程數。
 4 tmp_fifofile="/tmp/$$.fifo" # 腳本運行的當前進程ID號作為文件名
 5 mkfifo "$tmp_fifofile" # 新建一個隨機fifo管道文件
 6 exec 6<>"$tmp_fifofile" # 定義文件描述符6指向這個fifo管道文件
 7 rm "$tmp_fifofile"
 8 for ((i=0;i<$SEND_THREAD_NUM;i++));do
 9   echo # for循環 往 fifo管道文件中寫入13個空行
10 done >&6
11 
12 # 以下循環采用 while read 變量 的處理一行數據,看需要吧
13 for i in `seq 100`;do # 100for 循環 開始
14   read -u6 # 從文件描述符6中讀取行(實際指向fifo管道)
15 
16 {
17   echo $i # 打印 i 
18   sleep 3 # 暫停3秒
19   echo >&6 # 再次往fifo管道文件中寫入一個空行。
20 } &
21 
22 # {}部分語句被放入后台作為一個子進程執行,所以不必每次等待3秒后執行
23 #下一個,這部分的echo $i幾乎是同時完成的,當fifo中13個空行讀完后 for循環
24 # 繼續等待 read 中讀取fifo數據,當后台的13個子進程等待3秒后,按次序
25 # 排隊往fifo輸入空行,這樣fifo中又有了數據,for語句繼續執行
26 
27 done
28 wait    #等到后台的進程都執行完畢。
29 exec 6>&- #刪除文件描述符6
30 exit 0

 

mkfifo、exec 使用關聯學習 
其實也就是並發進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM