一直苦恼一个问题: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