http://blog.csdn.net/shuanghujushi/article/details/38186303

最近在使用shell做一些部署工作,在使用过程中,效率一直不高。想提高效率,经过分析发现,并不是所有操作都是需要串行的,一些操作是可以进行并行操作的。经过学习,shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制。下面是shell多线程和wait命令的一些学习体会。错误之处,还请大家指正。

一、启动后台子任务

在执行命令后加&操作符,表示将命令放在子shell中异步执行。可以达到多线程效果。如下,

[plain] view plain copy
  1. sleep 10 #等待10秒,再继续下一操作
  2. sleep 10 & #当前shell不等待,后台子shell等待

二、wait命令介绍

wait  [作业指示或进程号]

1.等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0.

2.如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。

3.在shell中使用wait命令,相当于高级语言里的多线程同步。

三、例子

1.使用wait等待所有子任务结束。

[plain] view plain copy
  1. #!/bin/bash
  2. sleep 10 &
  3. sleep 5&
  4. wait #等待10秒后,退出
[plain] view plain copy
  1. #!/bin/bash
  2. sleep 10 &
  3. sleep 5&
  4. wait $! #$!表示上个子进程的进程号,wait等待一个子进程,等待5秒后,退出

2.在函数中使用wait

[plain] view plain copy
  1. #!/bin/bash
  2. source ~/.bashrc
  3. fun(){
  4. echo "fun is begin.timeNum:$timeNum"
  5. local timeNum=$1
  6. sleep $timeNum &
  7. wait #这个只等待wait前面sleep
  8. echo "fun is end.timeNum:$timeNum"
  9. }
  10. fun 10 &
  11. fun 20 &
  12. wait #如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleep
  13. echo "all is ending"

输出结果为:

[plain] view plain copy
  1. fun is begin.timeNum:10
  2. fun is begin.timeNum:20
  3. fun is end.timeNum:10
  4. fun is end.timeNum:20
  5. all is ending

从输出结果,可以看到,整个脚本,等待了所有子任务的退出

linux shell编程多线程和wait命令学习相关推荐

  1. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  2. Linux shell编程学习

    Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...

  3. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  4. Linux Shell 编程学习笔记(1)

    Linux Shell编程学习笔(2015-7-11) 一:Shell程序运行的三种方法 赋予程序文件可执行权限,直接运行   比如:chmod a+x shell.sh 使用命令解释器(即shell ...

  5. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  6. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

  7. Linux Shell编程学习笔记(3)

    Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量   什么是位置参数?   位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...

  8. linux shell编程学习——数组使用

    linux的shell的编程方面很强大,最近在写脚本的时候,需要用到shell的数组.下面对最近的学习和使用做个简单的总结. 定义 linux的数组分两种,一种是普通的下标数组,一种是关联数组.前者和 ...

  9. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

最新文章

  1. spring中实现自己的初始化逻辑
  2. 【MongoDB】嵌套数组查询方案
  3. Python错误:TypeError: 'list' object is not callable
  4. EEPROM的操作---SPI接口和I2C接口
  5. 机器学习基石12-Nonlinear Transformation
  6. css悬浮在某个span后面,在contenteditable div中的span元素后面设置光标
  7. 如何安装python_怎么在Windows操作系统下安装Python和Networkx
  8. 查看电脑端口占用情况
  9. ListView刷新时让Item不可点击
  10. 制作业信息化为什么难施行?
  11. 【网络与系统安全实验】欺骗攻击及防御技术
  12. Spider之忽略网站SSL证书验证
  13. mogo语句常用用法
  14. aix服务器删除文件命令,AIX删除文件系统
  15. 《编码的奥秘》之手电筒剖析
  16. 数加加众包实习生招募进行中
  17. opencv 处理黑夜_Python基于OpenCV的固定位置半透明水印去除两种方案
  18. 树莓派4B启动失败之原因排查及解决方案
  19. 【电商】FMS财务管理系统---数据流转模块组成
  20. python中的无穷大

热门文章

  1. C8-2 圆的周长和面积 (100/100 分数)
  2. 字符串匹配(KMP 算法 含代码)
  3. Android programming on Mac 之安装Eclipse
  4. VSTO---excel编程 [待续] [12月5日更新,详见文档下面]
  5. c语言sqlist结构体,c语言里 sqlist
  6. java usb 无驱打印_Windows Usb 无驱动打印
  7. mysql数据库应用的权限层级_MySQL数据库的用户权限管理
  8. python绘制散点图的函数_python matplotlib更新函数的散点图
  9. php class使用方法,php的类使用方法问题
  10. 通过从全局和类内部重载operator new /delete来获取内存管理权