最近在使用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多執行緒...