app开发者平台在数字化时代的重要性与发展趋势解析
722
2022-11-23
shell多进程并发导入docker镜像
初级版
不足之处:当镜像较多时,会同时启动几百个进程,会突然增大服务器的负载,容易导致系统瞬间崩溃
for image in $(ls *.tar)do docker load -i $image &donewait
wait命令后如果以进程号作为参数,则等待该进程结束并返回其状态值。如果没有指定任何参数,则会等待当前shell激活的所有的子进程结束,返回状态为最后一个进程的退出状态。
中高级版
通过文件描述符和命名管道来控制每次并发的进程数量. 下面是每次导入10个镜像
#!/bin/bashPROGRESS_NUM=10 #并发的进程数量PIPE_FILE="/tmp/multiload_$$.tmp" #命名管道文件#创建命名管道文件,创建其文件描述符,通过重定向导入数据到管道文件中.mkfifo ${PIPE_FILE}exec 12<>${PIPE_FILE}for i in `seq ${PROGRESS_NUM}`do echo "" >&12 &done#成功读取命名管道中的数据后开启新的进程,docker load#所有内容读取完后read被阻塞,无法再启动新进程.#等待前面启动的进程结束后,继续往管道文件中写入数据,释放阻塞,再次开启新的进程.#read -u指定读取文件描述符for image in $(ls *.tar)do read -u12 { docker load -i ${image} echo "" >&12 } &donewaitrm -f ${PIPE_FILE}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~