参考:
http://www.jb51.net/article/51720.htm
http://bbs.51cto.com/thread-1104907-1-1.html
原理:
通过管道 和文件操作符控制进程数。
通过curl访问百度首页,并对比在进程数不同的情况下执行完脚本所用时间来验证多进程。
1.代码
#!/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内容为
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
执行过程及简要说明:
进程数为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
转载于:https://blog.51cto.com/xoyabc/1921316