..

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,可能就是不到一秒钟就结束了.