linux shell程式設計多執行緒和wait命令學習

2021-06-22 23:07:07 字數 1266 閱讀 6695

最近在使用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()

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命令學習

最近在使用shell做一些部署工作,在使用過程中,效率一直不高。想提高效率,經過分析發現,並不是所有操作都是需要序列的,一些操作是可以進行並行操作的。經過學習,shell裡面也是可以進行多執行緒程式設計的,而且十分方便,同時,wait命令可以進行shell的多執行緒同步控制。下面是shell多執行緒...

linux shell程式設計多執行緒和wait命令學習

最近在使用shell做一些部署工作,在使用過程中,效率一直不高。想提高效率,經過分析發現,並不是所有操作都是需要序列的,一些操作是可以進行並行操作的。經過學習,shell裡面也是可以進行多執行緒程式設計的,而且十分方便,同時,wait命令可以進行shell的多執行緒同步控制。下面是shell多執行緒...

linux shell程式設計多執行緒和wait命令學習

最近在使用shell做一些部署工作,在使用過程中,效率一直不高。想提高效率,經過分析發現,並不是所有操作都是需要序列的,一些操作是可以進行並行操作的。經過學習,shell裡面也是可以進行多執行緒程式設計的,而且十分方便,同時,wait命令可以進行shell的多執行緒同步控制。下面是shell多執行緒...