Bash:固定数のプロセスを待ちます。

Bash:固定数のプロセスを待ちます。

Java jarを実行するbashスクリプトを作成しました。N頻度。

実際に私はeを定義します。金持ち()通話を含む機能できるその後、このスクリプトを実行します。

for RUN in $(seq 1 $RUNS) 
do 
    foo & 
done

今処刑したくない走る並列時間できる。並列実行数に待機制限があります(例:wait10プロセスごと)。

ベストアンサー1

bashバージョン 4.4 では、次の便利な新しいイディオムが導入されました。パラメータ変換この場合は役に立ちます。以下のコードスニペットでは、${num_jobs@P}これは@P型であることに注意してください。パラメータ変換これにより、変数はプロンプト文字列のように拡張されますbashman 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

おすすめ記事