Unixでバックグラウンドプロセスの数を制限する方法

Unixでバックグラウンドプロセスの数を制限する方法

いつでも10個の部分のみを並列に実行できるようにしながら、100個の部分でスクリプトを実行する必要があります。

以下のスクリプトは、100個のプロセスをすべて同時にトリガーします。

for i in {1..100}
do
    nohup ksh my_background_script.ksh -mod ${i} &
done

答え1

xargsGNUには一般的に使用される2つのツールがありますparallel

  1. xargs以前のバージョンで、通常はデフォルトでインストールされますが、より制限的です。次のように使用できます。

     seq 1 100 | xargs -P 10 -I {} nohup ksh my_background_script.ksh -mod {} &
    

    -P 1010個のプロセスを並列に実行するように指示します。

  2. GNUはparallel多くのシステムにデフォルトでインストールされていませんが、すべてのGNU / Linuxシステムで簡単に利用できる必要がありますxargs

     parallel -j 10 nohup ksh my_background_script.ksh -mod ::: {1..100}
    

両方のプログラムとそれぞれの用途の詳細については、こちらをご覧ください。GNUパラレル対&(背景を意味する)対xargs -P

関連情報