一直苦恼一个问题:shell编程中,当一个任务完成时,接下来可以同时有两个任务可以运行,这两个任务互不影响。所以想当第一个任务完成后,同时启动后面的两个任务,不知到shell中如何同时启动。
今天解决了:使用后台运行的方式 &。
举个例子说明比较好。
有一个总执行的all.sh,有三个任务shell,分别是aa.sh, bb.sh,cc.sh。
当运行玩aa.sh后,同时运行bb.sh,cc.sh。
all.sh
#!/bin/bash
sh aa.sh
sh bb.sh &
sh cc.sh &
aa.sh
#!/bin/bash
echo 'start'
sleep 10
echo 'end'
bb.sh
#!/bin/bash
echo 'bb start '
sleep 10
echo 'bb end'
cc.sh
#!/bin/bash
echo 'cc start '
sleep 10
echo 'cc end'
运行 all.sh就实现了这种功能。
有了这种方式,我们就可以简单的进行性能测试了。
例如一种情形:100个人同时访问一个页面10次(并发):
#!/bin/bash
echo 'start'
echo 'end'
function hello()
{
for j in {1..10}
do
sleep 1
echo "${1}----------------------------$j"
#wget www.xxxxxx.com
done
}
for i in {1..100}
do
hello $i &
done
等待并发程序都结束之后,再执行后面的程序,使用wait命令
sh aa.sh &
p1=$!
sh bb &
p2=$!
wait $p1 && wait $p2