linux shell编程多线程和wait命令学习
来源:互联网 发布:同步助手数据还原 编辑:程序博客网 时间:2024/05/21 01:28
最近在使用shell做一些部署工作,在使用过程中,效率一直不高。想提高效率,经过分析发现,并不是所有操作都是需要串行的,一些操作是可以进行并行操作的。经过学习,shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制。下面是shell多线程和wait命令的一些学习体会。错误之处,还请大家指正。
一、启动后台子任务
在执行命令后加&操作符,表示将命令放在子shell中异步执行。可以达到多线程效果。如下,
sleep 10 #等待10秒,再继续下一操作 sleep 10 & #当前shell不等待,后台子shell等待
二、wait命令介绍
wait [作业指示或进程号]
1.等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0.
2.如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。
3.在shell中使用wait命令,相当于高级语言里的多线程同步。
三、例子
1.使用wait等待所有子任务结束。
#!/bin/bashsleep 10 &sleep 5&wait #等待10秒后,退出
#!/bin/bashsleep 10 &sleep 5&wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出
2.在函数中使用wait
#!/bin/bashsource ~/.bashrcfun(){ echo "fun is begin.timeNum:$timeNum" local timeNum=$1 sleep $timeNum & wait #这个只等待wait前面sleep echo "fun is end.timeNum:$timeNum"}fun 10 &fun 20 &wait #如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleepecho "all is ending"
输出结果为:
fun is begin.timeNum:10fun is begin.timeNum:20fun is end.timeNum:10fun is end.timeNum:20all is ending
从输出结果,可以看到,整个脚本,等待了所有子任务的退出
1 0
- linux shell编程多线程和wait命令学习
- linux shell编程多线程和wait命令学习
- linux shell编程多线程和wait命令学习
- linux shell编程多线程和wait命令学习
- Linux命令和shell编程学习--14章呈现数据
- Linux进阶命令和Shell编程
- Linux命令,Shell编程
- Shell wait命令
- <Linux命令,编辑器和shell编程>之命令部分读书笔记
- Linux-Shell脚本编程-学习-1-Linux基本命令
- Linux-Shell脚本编程-学习-2-Linux基本命令
- Linux命令shell脚本编程学习笔记-18章初识sed和gawk
- Linux学习——shell编程之正则表达式和字符处理命令
- linux 命令学习shell
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
- linux shell编程学习--test测试比较命令
- linux shell编程学习--循环流程while,for,until命令
- Linux命令与shell编程学习-15章控制脚本
- Foundation
- HTML的路径表示法
- struts2防止重复提交问题
- logstash+elasticsearch+redis+kibana3 日志收集系统搭建
- C++学习笔记之struct和union(结构和共用体)
- linux shell编程多线程和wait命令学习
- 南阳 540 奇怪的排序(结构体二级排序)
- Qemu Vhost Block架构分析(下)
- CMake 手册详解(21-23)
- Java中用正则表达式找出数字
- java多线程-多线程的安全问题-多线程同步代码块-锁Synchronized
- CentOS安装mysql
- android AIDL的一些写法
- SSH框架总结(框架分析+环境搭建+实例源码下载)