linux shell编程多线程和wait命令学习
http://blog.csdn.net/shuanghujushi/article/details/38186303
最近在使用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/bash
- sleep 10 &
- sleep 5&
- wait #等待10秒后,退出
- #!/bin/bash
- sleep 10 &
- sleep 5&
- wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出
2.在函数中使用wait
- #!/bin/bash
- source ~/.bashrc
- fun(){
- 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里面的sleep
- echo "all is ending"
输出结果为:
- fun is begin.timeNum:10
- fun is begin.timeNum:20
- fun is end.timeNum:10
- fun is end.timeNum:20
- all is ending
从输出结果,可以看到,整个脚本,等待了所有子任务的退出
linux shell编程多线程和wait命令学习相关推荐
- Linux Shell 编程学习总结
Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...
- Linux shell编程学习
Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...
- 《Linux Shell编程学习笔记之一》
<Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...
- Linux Shell 编程学习笔记(1)
Linux Shell编程学习笔(2015-7-11) 一:Shell程序运行的三种方法 赋予程序文件可执行权限,直接运行 比如:chmod a+x shell.sh 使用命令解释器(即shell ...
- Linux Shell编程学习笔记(4)
Linux Shell编程学习笔记(2015-7-20) 分类:linux shell 今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...
- Linux Shell编程学习笔记(2)
Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量 Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...
- Linux Shell编程学习笔记(3)
Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量 什么是位置参数? 位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...
- linux shell编程学习——数组使用
linux的shell的编程方面很强大,最近在写脚本的时候,需要用到shell的数组.下面对最近的学习和使用做个简单的总结. 定义 linux的数组分两种,一种是普通的下标数组,一种是关联数组.前者和 ...
- 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程
Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...
最新文章
- spring中实现自己的初始化逻辑
- 【MongoDB】嵌套数组查询方案
- Python错误:TypeError: 'list' object is not callable
- EEPROM的操作---SPI接口和I2C接口
- 机器学习基石12-Nonlinear Transformation
- css悬浮在某个span后面,在contenteditable div中的span元素后面设置光标
- 如何安装python_怎么在Windows操作系统下安装Python和Networkx
- 查看电脑端口占用情况
- ListView刷新时让Item不可点击
- 制作业信息化为什么难施行?
- 【网络与系统安全实验】欺骗攻击及防御技术
- Spider之忽略网站SSL证书验证
- mogo语句常用用法
- aix服务器删除文件命令,AIX删除文件系统
- 《编码的奥秘》之手电筒剖析
- 数加加众包实习生招募进行中
- opencv 处理黑夜_Python基于OpenCV的固定位置半透明水印去除两种方案
- 树莓派4B启动失败之原因排查及解决方案
- 【电商】FMS财务管理系统---数据流转模块组成
- python中的无穷大
热门文章
- C8-2 圆的周长和面积 (100/100 分数)
- 字符串匹配(KMP 算法 含代码)
- Android programming on Mac 之安装Eclipse
- VSTO---excel编程 [待续] [12月5日更新,详见文档下面]
- c语言sqlist结构体,c语言里 sqlist
- java usb 无驱打印_Windows Usb 无驱动打印
- mysql数据库应用的权限层级_MySQL数据库的用户权限管理
- python绘制散点图的函数_python matplotlib更新函数的散点图
- php class使用方法,php的类使用方法问题
- 通过从全局和类内部重载operator new /delete来获取内存管理权