..
shell多进程编程
#!/usr/bin/env bash
mysleep() {
echo "sleep $1 seconds"
sleep "$1"
}
main() {
for ((i = 1; i < 10; i++)); do
(mysleep $i) &
done
wait
}
time main
直接上了,这里要说明的是,把一行命令包起来表示用子shell来执行,而不是当前进程的shell, & 表示让当前进程到后台执行,不阻塞当前进程,这里的&非常关键,如果没有&就还是顺序执行,大家可以试一下,下面的wait命令也非常关键,表示等待当前进程的所有子进程返回,没有这里wait命令,main进程会提前退出,那么就有可能有命令没有执行完全.
hellojukay@deepin:~/Data/Code/Web/blog$ bash source/_posts/20180701/mysleep.sh
sleep 1 seconds
sleep 2 seconds
sleep 3 seconds
sleep 4 seconds
sleep 5 seconds
sleep 6 seconds
sleep 7 seconds
sleep 8 seconds
sleep 9 seconds
real 0m9.004s
user 0m0.011s
sys 0m0.006s
可以看到这里只使用了9秒钟,因为他是并行的.如果去掉 & ,那么有可能是45秒钟左右,如果去掉wait,可能就是不到一秒钟就结束了.