參考:html
http://www.jb51.net/article/51720.htmshell
http://bbs.51cto.com/thread-1104907-1-1.html
bash
原理:curl
經過管道 和文件操做符控制進程數。ide
經過curl訪問百度首頁,並對比在進程數不一樣的狀況下執行完腳本所用時間來驗證多進程。url
1.代碼
.net
#!/bin/bash #容許的進程數 THREAD_NUM=${2:-10} #定義描述符爲9的管道 mkfifo tmp exec 9<>tmp #預先寫入指定數量的換行符,一個換行符表明一個進程 for ((i=0;i<$THREAD_NUM;i++)) do echo -ne "\n" 1>&9 done if [ $# -lt 1 ] ;then echo "The parameters you enter is not correct !"; exit -1; fi date while read line do { #進程控制 read -u 9 { isok=`curl -I -o /dev/null -s -w %{http_code} $line` if [ "$isok" = "200" ]; then echo $line "OK" else echo $line "no" fi sleep 1 echo -ne "\n" 1>&9 }& } done < $1 wait echo "執行結束" date rm tmp
其中第一個變量指定url列表,第二個變量爲進程數。這裏url內容爲code
http://www.baidu.com http://www.baidu.com http://www.baidu.com http://www.baidu.com http://www.baidu.com http://www.baidu.com http://www.baidu.com
執行過程及簡要說明:htm
進程數爲1時,耗時7秒 [root@ms234 test]# sh shell_multi_process.sh url.txt 1 Tue May 2 23:13:39 CST 2017 http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK 執行結束 Tue May 2 23:13:46 CST 2017 進程數爲2時,耗時4秒 [root@ms234 test]# [root@ms234 test]# [root@ms234 test]# sh shell_multi_process.sh url.txt 2 Tue May 2 23:13:49 CST 2017 http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK 執行結束 Tue May 2 23:13:53 CST 2017 [root@ms234 test]# 進程數爲7時,耗時1秒 [root@ms234 test]# sh shell_multi_process.sh url.txt 7 Tue May 2 23:14:00 CST 2017 http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK http://www.baidu.com OK 執行結束 Tue May 2 23:14:01 CST 2017