Linux BASH多進(jìn)程并行處理的方法實(shí)現(xiàn)
更新時(shí)間:2013年01月23日 14:56:44 作者:
Linux下BASH多進(jìn)程并行處理的實(shí)現(xiàn)代碼,需要的朋友可以參考下
復(fù)制代碼 代碼如下:
#!/bin/bash
SEND_THREAD_NUM=13
tmp_fifofile="/tmp/$$.fifo" # 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)作為文件名
mkfifo “$tmp_fifofile" # 新建一個(gè)隨機(jī)fifo管道文件
exec 6<>"$tmp_fifofile" # 定義文件描述符6指向這個(gè)fifo管道文件
rm $tmp_fifofile
for ((i=0;i<$SEND_THREAD_NUM;i++));do
echo # for循環(huán) 往 fifo管道文件中寫入13個(gè)空行
done >&6
for i in `seq 100`;do # 100 次 for 循環(huán) 開始
read -u6 # 從文件描述符6中讀取行(實(shí)際指向fifo管道)
{
echo $i # 打印 i
sleep 3 # 暫停3秒
echo >&6 # 再次往fifo管道文件中寫入一個(gè)空行。
} &
# {} 這部分語(yǔ)句被放入后臺(tái)作為一個(gè)子進(jìn)程執(zhí)行,所以不必每次等待3秒后執(zhí)行
#下一個(gè),這部分的echo $i幾乎是同時(shí)完成的,當(dāng)fifo中13個(gè)空行讀完后 for循環(huán)
# 繼續(xù)等待 read 中讀取fifo數(shù)據(jù),當(dāng)后臺(tái)的13個(gè)子進(jìn)程等待3秒后,按次序
# 排隊(duì)往fifo輸入空行,這樣fifo中又有了數(shù)據(jù),for語(yǔ)句繼續(xù)執(zhí)行
pid=$! #打印最后一個(gè)進(jìn)入后臺(tái)的子進(jìn)程id
echo $pid
done
wait
exec 6>&- #刪除文件描述符6
exit 0
相關(guān)文章
shell通過(guò)sed上下兩行合并成一行的實(shí)現(xiàn)
本文主要介紹了shell通過(guò)sed上下兩行合并成一行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Ansible?Ad-hoc命令執(zhí)行模塊實(shí)戰(zhàn)教程
Ad-hoc是Ansible下臨時(shí)執(zhí)行的一條命令,對(duì)于復(fù)雜的命令會(huì)使用playbook。Ad-hoc的執(zhí)行依賴于模塊,ansible官方提供了大量的模塊,這篇文章主要介紹了Ansible?Ad-hoc命令執(zhí)行模塊?,需要的朋友可以參考下2024-02-02
shell腳本中執(zhí)行python腳本并接收其返回值的例子
這篇文章主要介紹了shell腳本中執(zhí)行python腳本并接收其返回值的例子,本文重點(diǎn)在于如何接收python腳本的返回值,需要的朋友可以參考下2014-08-08
Linux Shell腳本語(yǔ)句執(zhí)行失敗,后續(xù)語(yǔ)句繼續(xù)執(zhí)行的問(wèn)題及解決
這篇文章主要介紹了Linux Shell腳本語(yǔ)句執(zhí)行失敗,后續(xù)語(yǔ)句繼續(xù)執(zhí)行的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

