自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何并發(fā)執(zhí)行Linux命令

系統(tǒng) Linux
串行是按照順序一條接著一條的執(zhí)行命令,與串行相對(duì)的是多條命令同時(shí)執(zhí)行,稱做并行。

[[350718]]

本文轉(zhuǎn)載自微信公眾號(hào)「Linux開發(fā)那些事兒」,作者LinuxThings 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Linux開發(fā)那些事兒公眾號(hào)。   

串行是按照順序一條接著一條的執(zhí)行命令,與串行相對(duì)的是多條命令同時(shí)執(zhí)行,稱做并行

用途

在bash腳本中,并發(fā)執(zhí)行命令的用途很多,比如:批量上傳和下載,批量啟動(dòng)和關(guān)閉程序,批量打包日志,批量檢查遠(yuǎn)程機(jī)器是否可達(dá)等等

并行執(zhí)行能充分利用系統(tǒng)資源,極大的提高效率,節(jié)省大量的時(shí)間

例如:現(xiàn)需要下載20個(gè)文件,假設(shè)每個(gè)文件下載時(shí)間需要1分鐘

串行下載是一個(gè)文件下載完之后再下載另一個(gè)文件,這樣20個(gè)文件就需要20分鐘才能下載完

并行下載是啟動(dòng)20個(gè)進(jìn)程,20個(gè)進(jìn)程同時(shí)下載,每個(gè)進(jìn)程負(fù)責(zé)下載一個(gè)文件,這樣20個(gè)文件理論上只需要1分鐘左右就能全部下載完

串行和并行

在命令后面加上 & 符號(hào)就表示這條命令會(huì)在子進(jìn)程中執(zhí)行,下面是比較串行和并行的兩個(gè)實(shí)例

c.sh腳本

  1. #!/bin/bash 
  2. func_a() 
  3.   echo "func_a..$1.." 
  4.   sleep 1 
  5.  
  6. for n in $(seq 1 5); 
  7. do 
  8.   func_a $n 
  9. done 
  10.  
  11. echo "c.sh..finish.." 

執(zhí)行 time ./c.sh,結(jié)果如下

  1. [root@ecs-centos-7 mult]# time ./c.sh  
  2. func_a..1.. 
  3. func_a..2.. 
  4. func_a..3.. 
  5. func_a..4.. 
  6. func_a..5.. 
  7. c.sh..finish.. 
  8.  
  9. real    0m5.008s 
  10. user    0m0.005s 
  11. sys     0m0.003s 

上面的例子,連續(xù)調(diào)用5次 func_a函數(shù),每次調(diào)用都會(huì)睡眠1秒,,只有等上一次調(diào)用結(jié)束了才能進(jìn)行下一次調(diào)用,所以5次調(diào)用總共花費(fèi)了5秒鐘

修改 c.sh腳本,內(nèi)容如下

  1. #!/bin/bash 
  2. func_a() 
  3.   echo "func_a..$1.." 
  4.   sleep 1 
  5.  
  6. for n in $(seq 1 5); 
  7. do 
  8.   func_a $n & 
  9. done 
  10. wait 
  11. echo "c.sh..finish.." 

再次執(zhí)行 time ./c.sh,結(jié)果如下

  1. [root@ecs-centos-7 mult]# time ./c.sh  
  2. func_a..1.. 
  3. func_a..3.. 
  4. func_a..2.. 
  5. func_a..4.. 
  6. func_a..5.. 
  7. c.sh..finish.. 
  8.  
  9. real    0m1.006s 
  10. user    0m0.004s 
  11. sys     0m0.005s 

修改之后的腳本在循環(huán)體內(nèi) func_a $n 語(yǔ)句后面加了 & 符號(hào),表示后在子進(jìn)程中執(zhí)行 func_a $n命令

循環(huán)結(jié)束后面有一個(gè) wait 語(yǔ)句,表示等待前面循環(huán)體里的子進(jìn)程全部結(jié)束才會(huì)執(zhí)行后面的命令

由于子進(jìn)程不會(huì)阻塞當(dāng)前進(jìn)程,所以當(dāng)前進(jìn)程可以繼續(xù)執(zhí)行下一次調(diào)用,所以5次調(diào)用總共只花費(fèi)了1秒左右

在執(zhí)行 time ./c.sh命令期間,打開另一個(gè)終端輸入ps aux | grep c.sh 回車,輸出如下

  1. [root@ecs-centos-7 ~]# ps aux | grep c.sh 
  2. root     29086  0.0  0.0 113188  1400 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  3. root     29088  0.0  0.0 113188   628 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  4. root     29089  0.0  0.0 113188   628 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  5. root     29090  0.0  0.0 113188   628 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  6. root     29091  0.0  0.0 113188   628 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  7. root     29093  0.0  0.0 113188   628 pts/1    S+   22:55   0:00 /bin/bash ./c.sh 
  8. root     29099  0.0  0.0 112728   972 pts/2    S+   22:55   0:00 grep --color=auto c.sh 

從上面的輸出可以看到,同時(shí)有6個(gè)c.sh腳本進(jìn)程,其中5個(gè)是5次循環(huán)產(chǎn)生的子進(jìn)程,剩下1個(gè)是執(zhí)行c.sh腳本本身的進(jìn)程

檢查主機(jī)是否可達(dá)

當(dāng)有許多遠(yuǎn)程主機(jī)的需要管理的時(shí)候,經(jīng)常會(huì)對(duì)這些主機(jī)做一些檢查,而批量檢查主機(jī)是否可達(dá)是常見的操作,下面簡(jiǎn)單介紹下如何利用并發(fā)執(zhí)行快速檢查主機(jī)是否可達(dá)

假如有 host.txt 文件,里面存儲(chǔ)的是主機(jī)的IP地址,具體內(nèi)容如下

  1. [root@ecs-centos-7 mult]# cat host.txt 
  2. 192.168.0.1 
  3. 192.168.0.2 
  4. 192.168.0.3 
  5. 192.168.0.4 
  6. 192.168.0.5 
  7. 192.168.0.6 
  8. 192.168.0.7 
  9. 192.168.0.8 
  10. 192.168.0.9 

c.sh腳本,內(nèi)容如下

  1. #!/bin/bash 
  2.  
  3. ping_test() 
  4.   ping $1 -c 2 -W 3 &>/dev/null 
  5.   if [ $? -eq 0 ]; then 
  6.       echo "$1 reachable..." 
  7.   else 
  8.       echo "$1 unreachable..." 
  9.   fi 
  10.  
  11. for n in $(cat host.txt); 
  12. do 
  13.    ping_test $n & 
  14. done 
  15.  
  16. wait 
  17.  
  18. echo "c.sh..finish.." 

執(zhí)行 time ./c.sh,結(jié)果如下

  1. [root@ecs-centos-7 mult]# time ./c.sh  
  2. 192.168.0.1 reachable... 
  3. 192.168.0.9 reachable... 
  4. 192.168.0.4 unreachable... 
  5. 192.168.0.3 unreachable... 
  6. 192.168.0.6 unreachable... 
  7. 192.168.0.2 unreachable... 
  8. 192.168.0.8 unreachable... 
  9. 192.168.0.7 unreachable... 
  10. 192.168.0.5 unreachable... 
  11. c.sh..finish.. 
  12.  
  13. real    0m3.010s 
  14. user    0m0.014s 
  15. sys     0m0.011s 

腳本中 ping $1 -c 2 -w 3 語(yǔ)句是ping遠(yuǎn)程主機(jī)的命令, -c 2 表示發(fā)送數(shù)據(jù)包的次數(shù) ,-W 3 是把超時(shí)時(shí)間設(shè)置為 3 秒

從檢測(cè)結(jié)果可以看出,192.168.0.1 和 192.168.0.9主機(jī)是可達(dá)的,其他主機(jī)都是不可達(dá),總共花費(fèi)了3秒左右

 

責(zé)任編輯:武曉燕 來(lái)源: Linux開發(fā)那些事兒
相關(guān)推薦

2020-03-30 08:45:31

Linux命令

2024-05-31 12:54:37

.NET CoreLinux語(yǔ)言

2015-12-14 14:26:56

Linux命令pv

2021-09-06 11:58:24

Python腳本Jmeter

2018-06-07 08:25:20

Linux命令行GNU Paralle

2024-01-26 07:58:09

2019-08-30 07:24:16

2017-03-10 10:37:16

Linux命令腳本

2022-09-27 10:07:01

要使用 source

2010-06-24 17:02:07

Linux chgrp

2012-05-08 11:11:43

Linuxcrontab命令

2010-09-07 16:11:19

執(zhí)行DB2命令

2010-06-22 11:09:14

Linux At命令

2021-04-06 09:46:15

Linuxanacron命令系統(tǒng)運(yùn)維

2010-03-04 09:10:34

Linux Chrom

2020-09-21 05:53:28

Linux命令&

2010-07-15 14:54:51

at命令crontab定時(shí)執(zhí)行任務(wù)

2014-03-20 10:31:02

Linuxbin

2019-04-25 09:52:38

SSHLinux服務(wù)器

2020-12-07 06:42:09

LinuxIP命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)