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

2021-08-14 18:56:10 字數 1459 閱讀 7768

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

一、啟動後台子任務

在執行命令後加&操作符,表示將命令放在子shell中非同步執行。可以達到多執行緒效果。如下,

[plain]view plain

copy

sleep 10 #等待10秒,再繼續下一操作  

sleep 10 & #當前shell不等待,後台子shell等待  

二、wait命令介紹

wait  [作業指示或程序號]

1.等待作業號或者程序號制定的程序退出,返回最後乙個作業或程序的退出狀態狀態。如果沒有制定引數,則等待所有子程序的退出,其退出狀態為0.

2.如果是shell中等待使用wait,則不會等待呼叫函式中子任務。在函式中使用wait,則只等待函式中啟動的後台子任務。

3.在shell中使用wait命令,相當於高階語言裡的多執行緒同步。

三、例子

1.使用wait等待所有子任務結束。

[plain]view plain

copy

#!/bin/bash  

sleep 10 &  

sleep 5&  

wait #等待10秒後,退出  

[plain]view plain

copy

#!/bin/bash  

sleep 10 &  

sleep 5&  

wait $! #$!表示上個子程序的程序號,wait等待乙個子程序,等待5秒後,退出  

2.在函式中使用wait

[plain]view plain

copy

#!/bin/bash  

source ~/.bashrc  

fun()  

fun 10 &  

fun 20 &  

wait #如果fun裡面沒有wait,則整個指令碼立刻退出,不會等待fun裡面的sleep  

echo "all is ending"  

輸出結果為:

[plain]view plain

copy

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多執行緒...