zoukankan      html  css  js  c++  java
  • [linux] 线程和wait命令,sleep命令

    在linux脚本编程中使用多线程编程,其中wait命令可以实现shell的多线程同步控制。

    1. 启动后台子任务

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

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

    2. wait命令

      wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。使用wait可以在bash脚本“多进程”执行模式下,起到一些特殊控制的作用。

      wait  [作业指示或进程号]

      eg:wait 23   or  wait %1

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

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

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

     example:

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

    #!/bin/sh  
    echo “1”  
    sleep 5&  
    echo “3”  
    echo “4”  
    wait  #会等待wait所在bash上的所有子进程的执行结束,本例中就是sleep 5这句  
    输出:echo”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  
  • 相关阅读:
    CCF NOI1006 捡石头
    POJ NOI MATH-7648 蓄水池水管问题
    CCF NOI1005 存款收益
    CCF NOI1004 填充矩形
    CCF NOI1003 猜数游戏
    CCF NOI1002 三角形
    Project Euler Problem 26 Reciprocal cycles
    HDU1799 循环多少次?
    CCF NOI1001 温度转换
    POJ NOI MATH-7647 余数相同问题
  • 原文地址:https://www.cnblogs.com/xiaofeiIDO/p/6170199.html
Copyright © 2011-2022 走看看