我有一個包含我想運行的命令行的文件。該文件包含大約2,000行。如何並行運行命令列表?
我有8個可用的內核。是否有可能解析文件並啓動8個進程,然後在其中一個程序結束時從文件中執行另一個進程?我希望這樣繼續下去,直到文件結束。
我有一個包含我想運行的命令行的文件。該文件包含大約2,000行。如何並行運行命令列表?
我有8個可用的內核。是否有可能解析文件並啓動8個進程,然後在其中一個程序結束時從文件中執行另一個進程?我希望這樣繼續下去,直到文件結束。
您可以使用xargs來讀取文件,同時將最大進程數限制爲可用內核數。例如:
cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
--max-procs=$cores \
--replace \
--verbose \
/bin/sh -c "{}"
最好的解決方案 – 2012-07-15 07:22:16
只需通過運行帶有&的命令即可在後臺啓動新進程。有一個示例here描述了您的問題的解決方案。
使用GNU parallel。這是一個令人難以置信的強大工具,官方軟件包存在大約20個左右的Linux發行版。那是什麼? You have an excuse as to why you can't use it?這裏展示瞭如何並行運行一個命令列表或文件一個簡單的例子:的jobs.txt
內容:
sleep 1; echo "a"
sleep 3; echo "b"
sleep 2; echo "c"
命令:
time parallel :::: jobs.txt
結果:
a
c
b
real 0m3.332s
user 0m0.170s
sys 0m0.037s
備註:
如果您希望保持訂單與輸入相同,請將-k
標誌傳遞給GNU並行。
如果您擁有超過8個內核並且只希望處理8個內核,請將-j 8
添加到參數列表。
man page是一個很好的閱讀,但如果你還沒有閱讀this tutorial我強烈建議時間投資。
GNU並行在Ubuntu 11.10上不可用,但它在Debian sid上可用。值得注意的是,這個例子不會像moreutils包中的並行實用程序那樣工作,它具有不同的語義。 – 2012-07-15 06:58:58
-j 8不需要 - 它會自動檢測到。 Ubuntu軟件包:https://build.opensuse.org/package/binaries?package=parallel&project=home%3Atange&repository=xUbuntu_11.10 – 2012-07-16 13:21:01
爲了從一個文件並行運行命令,你可以執行'cat/path/to/file .txt | parallel' – 2016-04-06 06:48:06
請參閱[進程管理](http://mywiki.wooledge.org/ProcessManagement)。 – 2012-07-15 15:09:24