我想在我的shell腳本中引入多線程功能。Bash中的多線程
我有一個腳本,它調用具有不同參數的函數read_cfg()
。 這些函數調用都是獨立的。
是否可以並行地實例化這些函數調用(不是腳本)。 請讓我怎麼做到這一點..?
我想在我的shell腳本中引入多線程功能。Bash中的多線程
我有一個腳本,它調用具有不同參數的函數read_cfg()
。 這些函數調用都是獨立的。
是否可以並行地實例化這些函數調用(不是腳本)。 請讓我怎麼做到這一點..?
當然,只是添加&
指令後:
read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait
所有這些工作將隨後在後臺同時運行。可選的wait
命令將等待所有作業完成。
每個命令都會在一個單獨的進程中運行,所以它在技術上不是「多線程」,但我相信它可以解決您的問題。
Bash作業控制涉及多個進程,而不是多線程。
您可以使用&
後綴在後臺執行命令。
您可以等待使用wait
命令完成後臺命令。
您可以通過將它們與|
分開來並行執行多個命令。這也提供了同步機制,因爲在|
左邊的命令的標準輸出連接到右邊的命令標準輸出。
您可以並行運行多個腳本副本,每個副本用於不同的輸入數據,例如,處理所有* .cfg文件保存於4芯:
ls *.cfg | xargs -P 4 -n 1 read_cfg.sh
的read_cfg.sh腳本只接受一個參數(如強制執行由-N)
只是一個說明,你應該指定'read_cfg.sh'或'xargs'的完整路徑將會說它找不到該文件。 – Jeshurun 2013-07-16 10:22:14
更好地使用'printf'%s \ 0'* .cfg | xargs -0 ...' - 這種方式適用於帶有空格,不可打印字符等的文件名。另請參閱[爲什麼不應該解析ls(1)的輸出](http://mywiki.wooledge.org/ParsingLs)。 – 2016-09-21 22:49:28
這不是多線程 - 這是多。每個實例都運行在一個獨特的過程中,用'fork()'從原始複製過來。這些進程 - 與線程不同 - 具有它們自己的文件描述符表,並且它們的內存是寫入時拷貝(因此,當它們更改變量的值時,父進程不會看到它)。 – 2016-09-21 22:48:47