日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux shell创建进程数,[原创]bash shell的并发实现及进程数的控制

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux shell创建进程数,[原创]bash shell的并发实现及进程数的控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,要實現并發, 同時運行的進程必須是沒有先后順序的,否則也不適用.比如對多臺server進行ping.

一. 通過后臺運行的方式

常規方式:

[root@vm57-120 ~]# cat ping.sh

#!/bin/bash

for ip in 192.168.57.121 192.168.57.122 192.168.57.123

do

{ ping -c 20 $ip >/tmp/$ip.log; }

done

wait

wc -l /tmp/*.log

# time sh ping.sh

25 /tmp/192.168.57.121.log

25 /tmp/192.168.57.122.log

25 /tmp/192.168.57.123.log

75 total

real??? 0m57.073s

user??? 0m0.012s

sys???? 0m0.014s

后臺運行方式:

[root@vm57-120 ~]# cat mping.sh

#!/bin/bash

for ip in 192.168.57.121 192.168.57.122 192.168.57.123

do

{ ping -c 20 $ip >/tmp/$ip.log; } &

done

wait

wc -l /tmp/*.log

[root@vm57-120 ~]# time sh mping.sh

25 /tmp/192.168.57.121.log

25 /tmp/192.168.57.122.log

25 /tmp/192.168.57.123.log

75 total

real??? 0m19.037s

user??? 0m0.014s

sys???? 0m0.023s

以上兩種運行方式在效率上的差距是很明顯的. 另外上述的這種"并發"的進程數是不可控的,即你的循環上限是多少,并發的進程數也會無限接近這個值.

二. 通過管道實現進程數可控

[root@vm57-120 ~]# vim eping.sh

#!/bin/bash

pipefile=$$.fifo

mkfifo $pipefile

exec 3<>$pipefile

rm $pipefile

iplist=(192.168.57.121 192.168.57.122 192.168.57.123)

thread=5;

for (( i = 1;i<=${thread};i++ ))

do

echo;

done?>&3;????? ??# &3代表引用文件描述符3,這里循環就是向這個描述符里插入了5個占位符

#

for ip in ${iplist[*]}

do

read -u 3;????? ? # 描述符是按行插入和讀取的,每次讀取一次將少一個占位符,直到全部都讀取完后則會等待,等待之前的線程任務完成才可以繼續新的任務,這樣就達到了控制任務數的目的。

( ping -c 20 $ip >/tmp/$ip.log;echo >&3 ) &

done

wait

exec 3>&-;??????????? #關閉定義的管道

wc -l /tmp/*.log

[root@vm57-120 ~]# time sh eping.sh

25 /tmp/192.168.57.121.log

25 /tmp/192.168.57.122.log

25 /tmp/192.168.57.123.log

75 total

real??? 0m19.037s

user??? 0m0.014s

sys???? 0m0.030s

這與上面的時間是一樣的,我們調整進程數thread=2:

[root@vm57-120 ~]# time sh eping.sh

25 /tmp/192.168.57.121.log

25 /tmp/192.168.57.122.log

25 /tmp/192.168.57.123.log

75 total

real??? 0m38.042s

user??? 0m0.012s

sys???? 0m0.032s

{ } &大括號丟到后臺時,最后需要一個分號;? { cmd1;cmd2;} &

( cmd ) & 小括號必須放到腳本里運行才可以;在當前shell運行有問題;

閱讀(518) | 評論(0) | 轉發(0) |

總結

以上是生活随笔為你收集整理的linux shell创建进程数,[原创]bash shell的并发实现及进程数的控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。