shell下的多進程實現

參考: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
相關文章
相關標籤/搜索