shell多線程? 其實這裏說的是多進程.
其實就是開多個後臺進程, 然後等它們都結束後, 才認爲結束.
舉一個最常見的例子, ping一個網段內的所有ip, 看其通斷情況. 其他情況都可以套用這個例子來改造:
#! /bin/bash
#
# Distributed under terms of the MIT license.
#
# 這個併發度是爲了同時不會開太多進程, 怕系統資源不夠. 根據實際情況調節.
concurrency=${1:-5}
ipPrefix=${2:-"10.25.3"}
fifoFile="/tmp/$$.fifo"
fd=8
# 創建命名管道
mkfifo $fifoFile
trap "exec 8>&-; rm $fifoFile" EXIT
# 創建文件描述符並和文件關聯
# 測試過程中發現這裏不能用$fd, 就要寫上具體數字
exec 8<>"$fifoFile"
for i in `seq $concurrency`; do
echo >& $fd
done
for i in {1..254}; do
read -u $fd
{
ip="$ipPrefix.$i"
ping -c 1 -W 1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
echo >& $fd
}&
done
wait
echo "all done"