使用 xjobs 同時平行多工的執行程式

於 Linux 想要多工、同時非同步執行, 一般都會寫 Thread、Fork 或者利用 & 等等來做, 有沒有偷懶的方法, 可以直接把參數丟給程式後, 自動平行產生多個 Process 來處理呢?

  • Linux 可以安裝 xjobs 來使用看看: apt-get install xjobs
  • xjobs is most useful on multi-processor/core machines when one needs to execute several time consuming command several that could possibly be run in parallel.
  • xjobs - construct command line and execute jobs in parallel

註: Linux 還有 parallel 可以達成類似的事情.

使用 xjobs 同時平行多工的執行程式

xjobs 使用方式很簡單, 把參數寫在檔案裡面, 用 "\n"(斷行)分隔, 再 cat 出來丟給 xjobs 即可, 如下範例:

  1. vim arglist.txt # 產生下述內容

    1
    2
    3

  2. cat arglist.txt | xjobs -j 3 touch # -j 同時開啟3個 Process(processors) 來處理, 分別會執行:

    touch 1
    touch 2
    touch 3

  3. ls # 會產生 1, 2, 3 三個檔案

xjobs 使用範例

  • ls -1 *.zip | xjobs unzip
  • ls -1 *.zip | xjobs -n unzip
  • find . -name '*.bak' | xjobs gzip
  • ls -1 *.jar | sed 's/\(.*\)/\1 > \1.idx/' | xjobs jar tf
  • ls -1 *.mp3 | sed 's/\(.*\)\.mp3/"\1.mp3" > "\1.wav"/' | xjobs -- mpg123 -s
  • find -name '*wav' | xjobs oggenc
  • xjobs -s ./example.sh
  • cat filelist.txt | xjobs ./process.php # 把檔案列表丟進 process.php 處理.
  • cat domain-list | xjobs -j 3 ./whois.php # 把 Domain name 丟進 whois 查詢.
  • cat filenewline.txt | xjobs -j 3 -1 ./process.php # 依照換行分隔每個參數丟入執行

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料