参考: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