Java jarを実行するbashスクリプトを作成しました。N頻度。
実際に私はeを定義します。金持ち()通話を含む機能できるその後、このスクリプトを実行します。
for RUN in $(seq 1 $RUNS)
do
foo &
done
今処刑したくない走る並列時間できる。並列実行数に待機制限があります(例:wait
10プロセスごと)。
ベストアンサー1
bash
バージョン 4.4 では、次の便利な新しいイディオムが導入されました。パラメータ変換この場合は役に立ちます。以下のコードスニペットでは、${num_jobs@P}
これは@P
型であることに注意してください。パラメータ変換これにより、変数はプロンプト文字列のように拡張されますbash
。man bash
他のビューパラメータ変換オプション。
#!/bin/bash
num_procs=$1
num_iters=$2
num_jobs="\j" # The prompt escape for number of jobs currently running
for ((i=0; i<num_iters; i++)); do
while (( ${num_jobs@P} >= num_procs )); do
wait -n
done
foo &
done
Cheppnerのクレジットhttps://stackoverflow.com/a/38775799/6631810。
Kusalanandaのコメントによると、必要に応じて、このプロセスセットを数に影響を与える他のバックグラウンドタスクとは無関係にするために、独自のシェルにラップすることができます。これにはいくつかの変更が必要です。
#!/bin/bash
# start a wrapper shell for the group of jobs
cat<<EOS | bash &
num_procs="$1"
num_iters="$2"
for ((i=0; i<num_iters; i++)); do
# escape what's not supposed to be expanded
# at the time of here-doc redirection
while (( \${num_jobs@P} >= num_procs )); do
wait -n
done
foo &
done
EOS
# now you can do other things