shell 多執行緒

曲珂發表於2017-12-06

不熟悉 io 重定向的童鞋,先學習一下相關知識 http://www.linuxplus.org/kb/io-redirection.html

 

下面是簡單程式碼

#!/bin/bash

tmpfile='fifo'
mkfifo $tmpfile        #建立一個先進先出佇列

exec 6<>$tmpfile       #使用檔案描述符6關聯$tmpfile

for((i=0;i<5;i++));do  #初始化 你想併發幾個就迴圈幾次, echo >&6 就是往佇列裡放5個空值,讓後面的 read -u 6 可以一次讀取一行
    echo >&6
done

for i in {1..100};do   # 這裡只是舉例列印100個數,你也可以讀取一個大檔案
    read -u 6          # 能讀出來就繼續下面的任務,沒有東西可讀就掛起在這裡,等待後面的 echo >&6 往裡再放一個空行
    { echo $i          # 你實際要執行的命令
    sleep 3            # 為了讓你看到效果,可刪除這條命令
    echo >&6           # 補充一個空行,讓 read 可以繼續往下執行
    }&                 # 把你的任務放後臺才能併發
done

exec 6>&-              # 關閉檔案描述符6
rm -f $tmpfile

  

相關文章