成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何并發執行Linux命令

系統 Linux
串行是按照順序一條接著一條的執行命令,與串行相對的是多條命令同時執行,稱做并行。

[[350718]]

本文轉載自微信公眾號「Linux開發那些事兒」,作者LinuxThings 。轉載本文請聯系Linux開發那些事兒公眾號。   

串行是按照順序一條接著一條的執行命令,與串行相對的是多條命令同時執行,稱做并行

用途

在bash腳本中,并發執行命令的用途很多,比如:批量上傳和下載,批量啟動和關閉程序,批量打包日志,批量檢查遠程機器是否可達等等

并行執行能充分利用系統資源,極大的提高效率,節省大量的時間

例如:現需要下載20個文件,假設每個文件下載時間需要1分鐘

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

并行下載是啟動20個進程,20個進程同時下載,每個進程負責下載一個文件,這樣20個文件理論上只需要1分鐘左右就能全部下載完

串行和并行

在命令后面加上 & 符號就表示這條命令會在子進程中執行,下面是比較串行和并行的兩個實例

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.." 

執行 time ./c.sh,結果如下

  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 

上面的例子,連續調用5次 func_a函數,每次調用都會睡眠1秒,,只有等上一次調用結束了才能進行下一次調用,所以5次調用總共花費了5秒鐘

修改 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. wait 
  11. echo "c.sh..finish.." 

再次執行 time ./c.sh,結果如下

  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 

修改之后的腳本在循環體內 func_a $n 語句后面加了 & 符號,表示后在子進程中執行 func_a $n命令

循環結束后面有一個 wait 語句,表示等待前面循環體里的子進程全部結束才會執行后面的命令

由于子進程不會阻塞當前進程,所以當前進程可以繼續執行下一次調用,所以5次調用總共只花費了1秒左右

在執行 time ./c.sh命令期間,打開另一個終端輸入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 

從上面的輸出可以看到,同時有6個c.sh腳本進程,其中5個是5次循環產生的子進程,剩下1個是執行c.sh腳本本身的進程

檢查主機是否可達

當有許多遠程主機的需要管理的時候,經常會對這些主機做一些檢查,而批量檢查主機是否可達是常見的操作,下面簡單介紹下如何利用并發執行快速檢查主機是否可達

假如有 host.txt 文件,里面存儲的是主機的IP地址,具體內容如下

  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腳本,內容如下

  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.." 

執行 time ./c.sh,結果如下

  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 語句是ping遠程主機的命令, -c 2 表示發送數據包的次數 ,-W 3 是把超時時間設置為 3 秒

從檢測結果可以看出,192.168.0.1 和 192.168.0.9主機是可達的,其他主機都是不可達,總共花費了3秒左右

 

責任編輯:武曉燕 來源: Linux開發那些事兒
相關推薦

2020-03-30 08:45:31

Linux命令

2024-05-31 12:54:37

.NET CoreLinux語言

2015-12-14 14:26:56

Linux命令pv

2021-09-06 11:58:24

Python腳本Jmeter

2024-01-26 07:58:09

2018-06-07 08:25:20

Linux命令行GNU Paralle

2019-08-30 07:24:16

2010-06-24 17:02:07

Linux chgrp

2017-03-10 10:37:16

Linux命令腳本

2022-09-27 10:07:01

要使用 source

2012-05-08 11:11:43

Linuxcrontab命令

2010-06-22 11:09:14

Linux At命令

2010-09-07 16:11:19

執行DB2命令

2021-04-06 09:46:15

Linuxanacron命令系統運維

2010-03-04 09:10:34

Linux Chrom

2020-09-21 05:53:28

Linux命令&

2010-07-15 14:54:51

at命令crontab定時執行任務

2014-03-20 10:31:02

Linuxbin

2021-08-02 13:38:21

Linuxalias命令

2020-12-07 06:42:09

LinuxIP命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久r久久| 亚洲第一在线视频 | 国产精品久久久久久久午夜片 | 2021狠狠天天天 | 亚洲一区 中文字幕 | 国产精品一区二区久久精品爱微奶 | 国内久久精品 | 午夜精品视频一区 | 亚洲黄色片免费观看 | 免费一级毛片 | 国产欧美精品在线 | 久久久高清 | 欧洲免费毛片 | 亚洲综合大片69999 | 日韩一区二区在线视频 | 99re超碰| 蜜桃精品噜噜噜成人av | 毛片入口 | 久草网址 | 美女亚洲一区 | 亚洲精色 | 国产精品久久久久无码av | 日韩精品一区二区三区中文字幕 | 午夜视频一区 | 国产乡下妇女做爰 | 放个毛片看看 | 91精品国产综合久久久久久蜜臀 | 草久久久 | 黄色网页在线观看 | 日本 欧美 三级 高清 视频 | 国产免费又黄又爽又刺激蜜月al | 美女黄18岁以下禁止观看 | 久久精品网 | 国产福利视频导航 | 五月综合色啪 | 欧美午夜精品久久久久久浪潮 | 国产高清视频在线观看播放 | 国产精品不卡一区 | 国产精品国产精品国产专区不卡 | 午夜免费福利影院 | 男女黄网站 |