zoukankan      html  css  js  c++  java
  • shell-异步执行

    一、启动后台子任务

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

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

    二、wait命令介绍

            wait  [作业指示或进程号]

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

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

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

    三、例子

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


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

    2.在函数中使用wait


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

    输出结果为:


     
    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  


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

  • 相关阅读:
    将oh-my-zsh编程真正的my zsh
    Linux Shell 程序调试
    (64位)本体学习程序(ontoEnrich)系统配置说明文档
    Shell编程——vim常用命令
    Morris Traversal 方法遍历二叉树(非递归、不用栈,O(1)空间)
    206. Reverse Linked List
    欧几里德算法求解最大公约数
    25. Reverse Nodes in k-Group
    86. Partition List
    24. Swap Nodes in Pairs
  • 原文地址:https://www.cnblogs.com/anyehome/p/9068971.html
Copyright © 2011-2022 走看看