在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